Нет ничего «изначально» неправильного, о чем я знаю здесь. Это не будет хорошо масштабироваться до больших таблиц или очень больших вариантов столбцов.
Когда данные анализируются в варианте, SnowFlake выполняет некоторую обработку для них с целью индексации, обработки нулевых значений и производительности. Примечательно, что нулевые значения Variant, нулевое значение внутри JSON, можно сравнивать как равные себе, в отличие от SQL NULLS. Кроме того, типы данных, такие как числа и даты, хранятся в виде строк, когда они находятся внутри варианта, и используют равенство строк. Поэтому, если ваши источники данных обрабатывают типы данных по-разному, вы можете увидеть сценарий, в котором 2020-01-01 12:00:00.00
рассматривается как не равный 2020-01-01 12:00:00
, но я не проверял это.
Эта обработка является причиной того, что вы заметил (в отдельном комментарии), что {"a":1,"b":2}
хранится так же, как и {"b": 2, "a": 1}
, и поэтому они "равны" друг другу. Так что это технически может считаться «ложным срабатыванием», присоединяясь, когда вы не ожидаете, что они будут равны. Но, насколько я знаю, эта обработка последовательна, и вы не должны получать ложные негативы.