我开始阅读第一篇教程,了解如何从本地文件将数据加载到Snowflake。
这是我到目前为止设置的:
CREATE WAREHOUSE mywh;
CREATE DATABASE Mydb;
Use Database mydb;
CREATE ROLE ANALYST;
grant usage on database mydb to role sysadmin;
grant usage on database mydb to role analyst;
grant usage, create file format, create stage, create table on schema mydb.public to role analyst;
grant operate, usage on warehouse mywh to role analyst;
//tutorial 1 loading data
CREATE FILE FORMAT mycsvformat
TYPE = "CSV"
FIELD_DELIMITER= ','
SKIP_HEADER = 1;
CREATE FILE FORMAT myjsonformat
TYPE="JSON"
STRIP_OUTER_ARRAY = true;
//create stage
CREATE OR REPLACE STAGE my_stage
FILE_FORMAT = mycsvformat;
//Use snowsql for this and make sure that the role, db, and warehouse are seelcted: put file:///data/data.csv @my_stage;
// put file on stage
PUT file://contacts.csv @my
List @~;
list @%mytable;
然后在运行时在我的活动Snowsql中:
Put file:///Users/<user>/Documents/data/data.csv @my_table;
我已确认我具有正确的Accountadmin角色:002003(02000):SQL编译错误:阶段'MYDB.PUBLIC.MY_TABLE'不存在或未被授权。
因此,我尝试在Snowsql中创建表并成功:
create or replace table my_table(id varchar, link varchar, stuff string);
我在运行后仍然遇到此错误:
Put file:///Users/<>/Documents/data/data.csv @my_table;
002003(02000):SQL编译错误:阶段'MYDB.PUBLIC.MY_TABLE'不存在或未被授权。
在这种情况下,将文件放入my_table和my_stage有什么区别?感谢您的帮助!
编辑:
CREATE OR REPLACE TABLE myjsontable(json variant);
COPY INTO myjsontable
FROM @my_stage/random.json.gz
FILE_FORMAT = (TYPE= 'JSON')
ON_ERROR = 'skip_file';
CREATE OR REPLACE TABLE save_copy_errors AS SELECT * FROM TABLE(VALIDATE(myjsontable, JOB_ID=>'enterid'));
SELECT * FROM SAVE_COPY_ERRORS;
//error for random: Error parsing JSON: invalid character outside of a string: '\\'
//no error for generated
SELECT * FROM Myjsontable;
REMOVE @My_stage pattern = '.*.csv.gz';
REMOVE @My_stage pattern = '.*.json.gz';
//yay your are done!
put命令将文件从本地驱动器复制到舞台。您应该将其放置在舞台上,而不是放在桌子上。
put file:///Users/<>/Documents/data/data.csv @my_stage;
复制命令从舞台上加载它。