我正在尝试将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;
我正在尝试将csv.gz文件复制到我创建的表中,以开始分析地图的位置数据。我遇到一个错误,提示字符太多,应该添加一个...
您的错误并不表示您有太多字符,但您的文件有8列,而表有9列,因此它不知道如何将文件中的列与表中的列对齐。] >
您可以在COPY INTO
语句中使用子查询专门列出这些列。
是,设置该选项应该会有所帮助。从the documentation:
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE |假使用:仅数据加载
定义:布尔值,指定是否生成解析错误如果输入文件中的分隔列(即字段)数与相应表中的列数不匹配。
直接在data.world上查看该表时,存在名为location和location_2
的列,它们具有相同的数据。看起来该显示是错误的,因为下载CSV时,它只有一个location