snowflake-cloud-data-platform - 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
解决方案
我实验过的事情如下。
- 首先,我尝试使用单个列进行测试,即尝试使用以下查询打印ID和PRODUCT列。
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)
推荐阅读
- vba - 将 powerpoint 中的图表数据提取到剪贴板(VBA 代码几乎可以工作)
- ionic-framework - 在 Ionic 3 中全局设置行高
- git - 我可以使用相同的命令将标签/分支签出为分支吗?
- javascript - 如何在可编辑组件(vue)中的复制/粘贴操作中过滤文本内容
- cad - 适用于 Android IOS Web 和桌面的 CAD SDK 建议用于读写 DWG 文件
- angular - 如何在属性更改时触发observer.next()
- cassandra - Cassandra 2.1.17:sstableloader 使用 -cph3 错过墓碑
- python - 在 Python 中的 BeatifulSoup 中抓取 itemprop="name"
- java - 如何使用 Java 将屏幕流式传输到 Raspberry?
- php - API cURL 调用中的错误:{"errors":{"price_rule":"必需参数丢失或无效"}}