分段的内部文件csv.gz给出了文件与对应表的大小不匹配的错误?

问题描述 投票:0回答:3

我正在尝试将csv.gz文件复制到我创建的表中,以开始分析地图的位置数据。我遇到了一个错误,该错误表明字符太多,应该添加on_error选项。但是,我不确定这是否有助于加载数据,可以看看吗?

数据源:https://data.world/cityofchicago/array-of-things-locations

SELECT * FROM staged/array-of-things-locations-1.csv.gz


CREATE OR REPLACE TABLE ARRAYLOC(name varchar, location_type varchar, category varchar, notes varchar, status1 varchar, latitude number, longitude number, location_2 variant, location variant);

COPY INTO ARRAYLOC
   FROM @staged/array-of-things-locations-1.csv.gz;
 
 CREATE OR REPLACE FILE FORMAT t_csv
   TYPE = "CSV"
   COMPRESSION = "GZIP"
   FILE_EXTENSION= 'csv.gz'
 
 CREAT OR REPLACE STAGE staged
    FILE_FORMAT='t_csv';
    
COPY INTO ARRAYLOC FROM @~/staged file_format = (format_name = 't_csv');

错误消息:

Number of columns in file (8) does not match that of the corresponding table (9), use file format option error_on_column_count_mismatch=false to ignore this error File '@~/staged/array-of-things-locations-1.csv.gz', line 2, character 1 Row 1 starts at line 1, column "ARRAYLOC"["LOCATION_2":8] If you would like to continue loading when an error is encountered, use other values such as 'SKIP_FILE' or 'CONTINUE' for the ON_ERROR option. For more information on loading options, please run 'info loading_data' in a SQL client.

已解决:真正的问题是我需要更好地清理正在分阶段的数据。这是我的错误。这就是我最终要更改的内容:列类型,将文件从“更改为”,并且由于数据中间的逗号而不得不分隔一列。

CREATE OR REPLACE TABLE ARRAYLOC(name varchar, location_type varchar, category varchar, notes varchar, status1 varchar, latitude float, longitude varchar, location varchar);

COPY INTO ARRAYLOC
   FROM @staged/array-of-things-locations-1.csv.gz;
 
 CREATE or Replace FILE FORMAT r_csv
   TYPE = "CSV"
   COMPRESSION = "GZIP"
   FILE_EXTENSION= 'csv.gz'
   SKIP_HEADER = 1
   ERROR_ON_COLUMN_COUNT_MISMATCH=FALSE
   EMPTY_FIELD_AS_NULL = TRUE;
 
 create or replace stage staged
    file_format='r_csv';
    
copy into ARRAYLOC from @~/staged 
   file_format = (format_name = 'r_csv');
   
SELECT * FROM ARRAYLOC LIMIT 10;

enter image description here

我正在尝试将csv.gz文件复制到我创建的表中,以开始分析地图的位置数据。我遇到一个错误,提示字符太多,应该添加一个...

snowflake-data-warehouse
3个回答
2
投票

您的错误并不表示您有太多字符,但您的文件有8列,而表有9列,因此它不知道如何将文件中的列与表中的列对齐。] >

您可以在COPY INTO语句中使用子查询专门列出这些列。


1
投票

是,设置该选项应该会有所帮助。从the documentation

ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE |假使用:仅数据加载

定义:布尔值,指定是否生成解析错误如果输入文件中的分隔列(即字段)数与相应表中的列数不匹配。


0
投票

直接在data.world上查看该表时,存在名为location和location_2

的列,它们具有相同的数据。看起来该显示是错误的,因为下载CSV时,它只有一个location
© www.soinside.com 2019 - 2024. All rights reserved.