Snowflake中存储CSV内31-12-2014格式日期的适配数据类型咨询
解决Snowflake中DD-MM-YYYY格式日期的存储问题
直接用DATE类型是最优解,既能利用Snowflake的日期处理能力,又能节省存储空间,避免字符串存储的冗余和后续转换麻烦。具体操作如下:
- 修改表结构
把"Shipment date"的数据类型从varchar(16777216)改为DATE,同时可以去掉单独存储的"Shipment year"字段——后续直接通过日期函数提取年份即可,避免数据冗余。
修改后的表字段定义示例:
"Shipment date" DATE,
- 加载数据时指定日期格式
Snowflake默认日期格式是YYYY-MM-DD,所以需要在数据加载阶段明确指定你的CSV日期格式为DD-MM-YYYY,有两种常用方式:
- 创建自定义文件格式
CREATE OR REPLACE FILE_FORMAT my_csv_format TYPE = CSV DATE_FORMAT = 'DD-MM-YYYY' FIELD_OPTIONALLY_ENCLOSED_BY = '"';
然后用这个文件格式加载数据:
COPY INTO your_table FROM @your_stage/your_file.csv FILE_FORMAT = my_csv_format;
- 在COPY INTO语句中直接指定
COPY INTO your_table FROM @your_stage/your_file.csv FILE_FORMAT = (TYPE = CSV DATE_FORMAT = 'DD-MM-YYYY' FIELD_OPTIONALLY_ENCLOSED_BY = '"');
- 提取年份的方式
如果需要用到年份,直接通过Snowflake的日期函数提取,比如:
SELECT DATE_PART('YEAR', "Shipment date") AS "Shipment year" FROM your_table;
这样既保证了年份数据的准确性(不会因为手动存储出现不一致),又节省了存储资源。
内容的提问来源于stack exchange,提问作者Md Shahnawaz Alam
相关产品推荐
相关产品推荐

