Snowflake 中 Parquet returns NULL 的外部暂存数据

External staging data of parquet returns NULL in Snowflake

各位,我在 S3 上有一个存储镶木地板文件的外部舞台。 现在,我创建了一个 table 作为 T1_D1:

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

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

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

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

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

作为附加步骤,我在源镶木地板文件上使用了 AWS 爬虫,它为我提供了以下 table 的架构,如下所示。

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

我试验过的东西如下。

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

select :ID::number, :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 爬虫来查找源模式的数据类型,并相应地编写了雪花查询。通过更改雪花中的数据类型。但它仍然是 returns NULL。

  • 然后我发现,源拼花文件中列的命名约定不合适。即目标列 "ID" 在源系统中被命名为 "ID" 本身,但在 "PRODUCT" 中。 =39=] 在源 parquet 文件中被命名为 "Product"TRANSACTION_DATE 被命名为 Transaction_Date.

  • 以下查询成功。

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