SQL Server到雪花-从CSV加载XML

pkwftd7m  于 2022-12-06  发布在  SQL Server
关注(0)|答案(2)|浏览(123)

我正在尝试通过利用AlteryxSnowSQL自动将数据从SQL Server迁移到Snowflake
步骤如下:
1.在SF中创建数据库
1.在SF中创建模式
1.在SF中创建表
1.将数据从SQL Server下载到CSV文件
1.在SF中暂存CSV文件
1.将文件从分段复制到SF中的表
除了步骤#6使用一种SQL Server数据类型之外,该过程运行正常:XML格式
我们以数据库[AdventureWorks2017]中的表[Production].[* Illustrator *]为例。
在SQL Server中,该表的创建方式如下:

CREATE TABLE [Production].[Illustration](
    [IllustrationID] [int] IDENTITY(1,1) NOT NULL,
    [Diagram] [xml] NULL,
    [ModifiedDate] [datetime] NOT NULL
)

Snowflake中的匹配表为:

create or replace TABLE ILLUSTRATION (
    "IllustrationID" NUMBER(10,0),
    "Diagram" VARIANT,
    "ModifiedDate" TIMESTAMP_NTZ(9)
);

使用以下SnowSQL指令执行步骤6:

COPY INTO AdventureWorks201789.Production.Illustration FROM @AdventureWorks201789.Production.%Illustration FILE_FORMAT= (FORMAT_NAME='my_csv_format') PURGE=TRUE;

此命令引发此错误:

Error parsing JSON: <!-- Generated by Adobe Illustrator CS -> XAML Export Plug-In Version 0.17      --><!-- For questions
    File '@ILLUSTRATION/AdventureWorks201789.Production.Illustration.csv.gz', line 2, character 0
    Row 1, column "ILLUSTRATION"["Diagram":2]

显然,问题在于SnowSQL将数据解析为JSON,而实际上应该是XML
不幸的是,我在文档中找不到任何方法来更改此行为:雪花文件
CSV文件可从here下载。
有人愿意接受挑战吗?

ha5z0ras

ha5z0ras1#

我刚测试了你的配置上传了文件

put file:///Users/gatil/Downloads/AdventureWorks2017.Production.Illustration.csv @mystage;

创建表:

create or replace TABLE ILLUSTRATION (
"IllustrationID" NUMBER(10,0),
"Diagram" VARCHAR(16777216),
"ModifiedDate" TIMESTAMP_NTZ(9)
);

已创建文件格式对象(CSVFILE):

create FILE FORMAT MY_CSV_FILE 
COMPRESSION = 'AUTO' 
FIELD_DELIMITER = ',' 
RECORD_DELIMITER = '\n' 
SKIP_HEADER = 1 
FIELD_OPTIONALLY_ENCLOSED_BY = '\042' 
TRIM_SPACE = FALSE 
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE 
ESCAPE = 'NONE' 
ESCAPE_UNENCLOSED_FIELD = '\134' 
DATE_FORMAT = 'AUTO' 
TIMESTAMP_FORMAT = 'AUTO' 
NULL_IF = ('\\N');

并运行copy命令:

COPY INTO Illustration FROM @mystage FILE_FORMAT= (FORMAT_NAME= MY_CSV_FILE );

它成功地加载了5行,我可以看到它没有尝试将它们转换为JSON。请检查您的文件格式对象好吗?

xqk2d5yq

xqk2d5yq2#

我也遇到了同样的问题,将它与Gokhan提到的VARCHAR(16777216)列一起加载到snowflake中,然后在处理XML时使用PARSE_XML()函数将该列转换为XML,它工作得很好。直接尝试处理VARCHAR数据是行不通的,PARSE_XMl会将字符串转换为XML对象,这将允许XML相关函数解释数据。
如果有进一步的问题,请告诉我,如果它不起作用,也请告诉我。
祝你一切顺利
干杯!干杯!

相关问题