在教程 "Tutorial: Bulk Loading from a local file system using copy" 中,my_stage 和 my_table 权限有什么区别?
In the tutorial "Tutorial: Bulk Loading from a local file system using copy" what is the difference between my_stage and my_table permissions?
我开始学习如何从本地文件将数据加载到 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 中创建 table 并成功:
create or replace table my_table(id varchar, link varchar, stuff string);
在我 运行:
之后我仍然 运行 进入这个错误
Put file:///Users/<>/Documents/data/data.csv @my_table;
002003 (02000): SQL compilation error:
Stage 'MYDB.PUBLIC.MY_TABLE' does not exist or not authorized.
在这种情况下将文件放入 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 放到舞台上,而不是 table。
put file:///Users/<>/Documents/data/data.csv @my_stage;
复制命令从舞台加载它。
但在文档中提到它是为每个阶段默认创建的
每个 table 默认分配一个 Snowflake 阶段用于存储文件。如果您的文件需要可供多个用户访问并且只需要复制到单个 table.
,则此阶段是一个方便的选择
Table 阶段具有以下特征和限制:
Table 阶段与 table 同名;例如名为 mytable 的 table 有一个引用为 @%mytable
的阶段
在这种情况下,如果不创建阶段,它应该加载到分配的默认 Snowflake 阶段
我开始学习如何从本地文件将数据加载到 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 中创建 table 并成功:
create or replace table my_table(id varchar, link varchar, stuff string);
在我 运行:
之后我仍然 运行 进入这个错误Put file:///Users/<>/Documents/data/data.csv @my_table;
002003 (02000): SQL compilation error:
Stage 'MYDB.PUBLIC.MY_TABLE' does not exist or not authorized.
在这种情况下将文件放入 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 放到舞台上,而不是 table。
put file:///Users/<>/Documents/data/data.csv @my_stage;
复制命令从舞台加载它。
但在文档中提到它是为每个阶段默认创建的
每个 table 默认分配一个 Snowflake 阶段用于存储文件。如果您的文件需要可供多个用户访问并且只需要复制到单个 table.
,则此阶段是一个方便的选择Table 阶段具有以下特征和限制:
Table 阶段与 table 同名;例如名为 mytable 的 table 有一个引用为 @%mytable
的阶段在这种情况下,如果不创建阶段,它应该加载到分配的默认 Snowflake 阶段