我有一个 avro 文件,我正在尝试使用合并查询将其内容插入到雪花表中。
Avro 文件是 test.avro.gz,它可以包含半结构化数据。 如果我将此文件转换为 json,它将包含如下数据: 示例:
{
"ID" : 16,
"VISITS" : 2,
"DATE" : 1623801600,
"DIMENSIONS" : [
{
"index" : 17,
"value" : "(none)"
}
],
"TYPE" : "VISIT",
}
{
"ID" : 18,
"VISITS" : 4,
"DATE" : 1623801600,
"DIMENSIONS" : [
{
"index" : 7,
"value" : "(none)"
}
],
"TYPE" : "VISIT",
}
我已经创建了一个文件格式和一个临时阶段:
snowflake_client.run("create or replace file format test_format type = 'avro'")
stage_name = f"test_{snowflake_client.generate_random_string()}"
create_stage = f"CREATE TEMPORARY STAGE {stage_name} COMMENT = 'TEMPORARY STAGE FOR test table DATA LOAD'"
snowflake_client.run(create_stage)
snowflake_client.run(f"put file://test.avro.gz @{stage_name} PARALLEL=16")
我使用的合并查询是:
query = f"MERGE INTO TEST USING (SELECT $1 ID, $2 VISITS,$3 DATE, $6 TOTALS, $7 TRAFFICSOURCE
FROM @{stage_name} (file_format => 'test_format'))
TEMP_STAGE ON TEST.ID= TEMP_STAGE.ID and TEST.VISITS=TEMP_STAGE.VISITS
WHEN NOT MATCHED THEN INSERT (ID,VISITS,DATE,TOTALS,DIMENSIONS,TYPE) VALUES
(TEMP_STAGE.ID,TEMP_STAGE.VISITS,TEMP_STAGE.DATE,TEMP_STAGE.DIMENSIONS,
TEMP_STAGE.TYPE);"
snowflake_client.run(query)
我想要的是数据在 ID 和 VISITS 上是唯一的,因此我使用合并而不是复制。
雪花表的数据如下:
ID VISITS DATE DIMENSIONS TYPE
16 2 1623801600 [{"index" : 17,"value" : "(none)"}] VISIT
我得到的错误是:
**AVRO file format can produce one and only one column of type variant or object or array.
Use CSV file format if you want to load more than one column.**
据我所知,它正在将所有数据加载到 $1,但是我该如何解决这个问题,并使用合并查询将 ID 和 VISITS 上唯一的数据插入到表中。