如何在Snowpipe中获取AVRO格式文件的Value列以验证数据映射?
问题解答
是的,Snowpipe可以生成类似外部表中存储JSON格式行数据的value列,具体可通过以下两种方式实现:
方式1:将整行数据转为JSON格式存入value列
如果目标表已定义value列,可在COPY语句中通过子查询,用TO_JSON($1)把整行AVRO数据序列化为JSON字符串,存入该列。修改后的语句示例:
CREATE OR REPLACE PIPE fuel_analytics_pipe AUTO_INGEST = TRUE AS COPY INTO DATNS.PRING.FUNNEL_PIPE (value, FILENAME, FILE_LAST_MODIFIED) FROM ( SELECT TO_JSON($1) AS value, METADATA$FILENAME AS FILENAME, METADATA$FILE_LAST_MODIFIED AS FILE_LAST_MODIFIED FROM @finance_analytics_stage ) FILE_FORMAT = (TYPE = 'AVRO') pattern ='ETL/2025/02/04/futrics_.*\\.avro' ;
方式2:保留原始半结构化数据格式
若无需转为JSON字符串,可直接将原始AVRO行数据存入value列(需将列类型设为VARIANT),Snowflake会自动解析为半结构化格式,方便后续验证映射:
CREATE OR REPLACE PIPE fuel_analytics_pipe AUTO_INGEST = TRUE AS COPY INTO DATNS.PRING.FUNNEL_PIPE (value, FILENAME, FILE_LAST_MODIFIED) FROM ( SELECT $1 AS value, METADATA$FILENAME AS FILENAME, METADATA$FILE_LAST_MODIFIED AS FILE_LAST_MODIFIED FROM @finance_analytics_stage ) FILE_FORMAT = (TYPE = 'AVRO') pattern ='ETL/2025/02/04/futrics_.*\\.avro' ;
注意:使用自定义子查询时,原语句中的MATCH_BY_COLUMN_NAME=CASE_INSENSITIVE会失效,需在COPY INTO中显式指定目标列,并在子查询中完成字段映射。
内容的提问来源于stack exchange,提问作者Xi12
相关产品推荐
相关产品推荐

