首页 > 解决方案 > Parquet 的外部暂存数据在 Snowflake 中返回 NULL

问题描述

大家,我有一个S3存储镶木地板文件的外部舞台。现在,我创建了一个表T1_D1

CREATE TABLE T1_D1(ID NUMBER(38,0),
TRANSACTION_DATE TIMESTAMP_NTZ(9),
PRODUCT VARCHAR(16777216))

现在,我正在运行以下脚本,以测试我正在加载的数据是否正确。

select 
$1:ID::number,
$1:PRODUCT::VARCHAR(16777216)
from @my_s3/T1/day_2_sales.parquet
(file_format => my_parq)    

它成功返回了ID数字,而产品NULL在所有行中都返回为 。我什至尝试使用交易日期列运行,但同样的问题仍然存在。(即)ID匹配并正确返回数据,但时间戳值抛出我NULL

$1:ID::NUMBER, $1:TRANSACTION_DATE::TIMESTAMP_NTZ(9) 1, 2, 3, 6, 7, 8, 9, 6, 7, 8, 9, 10, 11,

作为附加步骤,我在源 parquet 文件上使用了 AWS 爬虫,它为我提供了下表的架构,如下所示。

1 id : bigint 2 transaction_date : string 3 product : string

标签: snowflake-cloud-data-platformsnowflake-schema

解决方案


我实验过的事情如下。

  • 首先,我尝试使用单个列进行测试,即尝试使用以下查询打印IDPRODUCT列。

select $1:ID::number, $1:PRODUCT::VARCHAR(16777216) from @my_s3/T1/day_2_sales.parquet (file_format => my_parq)

 It returned ID's correctly but the product values are null.
  • 所以我使用了 AWS 爬虫,以查找源模式的数据类型,并相应地编写了雪花查询。通过更改雪花中的数据类型。但它仍然返回NULL。

  • 然后我发现,源拼花文件中列的命名约定不合适。即目标列“ID”在源系统中被命名为“ID” ,但在源拼花文件中, “PRODUCT”被命名为“Product” 。并且TRANSACTION_DATE被命名为Transaction_Date

  • 以下查询成功运行。

select $1:ID::number, $1:Transaction_date::timestamp, $1:Product::varchar from @my_s3/T1/day_1_sales.parquet (file_format => my_parq)


推荐阅读