我开始阅读第一个教程,了解如何从本地文件将数据加载到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!
答案 0 :(得分:1)
put命令将文件从本地驱动器复制到舞台。您应该在舞台上进行摆放,而不是在桌子上摆放。
put file:///Users/<>/Documents/data/data.csv @my_stage;
copy命令从舞台上加载它。
答案 1 :(得分:0)
但是在文档中,它的提及就像每个阶段都会默认创建一样
每个表默认都有一个Snowflake阶段分配给它,用于存储文件。如果您的文件需要多个用户访问并且只需要复制到一个表中,则此阶段是一个方便的选择。
表阶段具有以下特征和局限性:
表阶段与表同名;例如名为mytable的表的阶段被称为@%mytable
在这种情况下,如果不创建阶段,则应将其加载到已分配的默认雪花阶段中