将 Snowflake table 卸载到 parquet 中的 s3 时保留模式
Retaining schema when unloading Snowflake table to s3 in parquet
我在 Snowflake 上的 table 包含一个创建为 INT
的字段,默认为 NUMBER(38,0)
作为 Snowflake 数据类型。
当我使用 COPY 命令以 parquet 格式将此 table 卸载到 s3 时,我希望保留整个模式,包括该字段的精度。但是,生成的镶木地板具有 INT32 Decimal(precision=9, scale=0)
.
在 Snowflake 文档中,提到
/* To retain the table schema in the output file, use a simple SELECT statement (e.g. SELECT * FROM cities). */
但是,我下面的查询并没有保持精度不变。
COPY INTO @staging.dl_stage/prediction/vehicle/export_date=20200226/file
FROM (
SELECT * FROM snd_staging.PREDICTION.vehicle
)
FILE_FORMAT=(type='parquet' COMPRESSION = AUTO)
HEADER = TRUE
OVERWRITE = TRUE
SINGLE = False
MAX_FILE_SIZE=256000000;
是否可以强制保持 Snowflake 数据类型精度不变?
我最终通过 运行 解决了这个问题:
alter session set ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION = false;
我在 Snowflake 上的 table 包含一个创建为 INT
的字段,默认为 NUMBER(38,0)
作为 Snowflake 数据类型。
当我使用 COPY 命令以 parquet 格式将此 table 卸载到 s3 时,我希望保留整个模式,包括该字段的精度。但是,生成的镶木地板具有 INT32 Decimal(precision=9, scale=0)
.
在 Snowflake 文档中,提到
/* To retain the table schema in the output file, use a simple SELECT statement (e.g. SELECT * FROM cities). */
但是,我下面的查询并没有保持精度不变。
COPY INTO @staging.dl_stage/prediction/vehicle/export_date=20200226/file
FROM (
SELECT * FROM snd_staging.PREDICTION.vehicle
)
FILE_FORMAT=(type='parquet' COMPRESSION = AUTO)
HEADER = TRUE
OVERWRITE = TRUE
SINGLE = False
MAX_FILE_SIZE=256000000;
是否可以强制保持 Snowflake 数据类型精度不变?
我最终通过 运行 解决了这个问题:
alter session set ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION = false;