繁体   English   中英

SQL 服务器到 Snowflake - 从 CSV 加载 XML

[英]SQL Server to Snowflake - Load XML from CSV

我正在尝试通过利用AlteryxSnowSQL自动将数据从SQL Server迁移到Snowflake

以下是步骤:

  1. 在 SF 中创建数据库
  2. 在 SF 中创建模式
  3. 在 SF 中创建表
  4. 从SQL服务器下载数据到CSV个文件
  5. 在 SF 中暂存 CSV 个文件
  6. 将文件从暂存复制到 SF 中的表

除了第 6 步外,该过程工作正常,其中一个 SQL Server data type: XML

我们以数据库[ AdventureWorks2017 ]中的表[ Production ].[ Illustration ]为例。

在 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

不幸的是,我在文档中找不到任何方法来更改此行为: Snowflake Doc

CSV 文件可以从这里下载。

有人愿意接受挑战吗?

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

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 INTO Illustration FROM @mystage FILE_FORMAT= (FORMAT_NAME= MY_CSV_FILE );

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

我遇到了同样的问题,使用上面 Gokhan 提到的 VARCHAR(16777216) 列将它加载到雪花中,然后在处理 XML 时使用 PARSE_XML() function 将该列转换为 XML 并且它工作正常。 直接尝试处理 VARCHAR 数据是行不通的,PARSE_XMl 会将字符串转换为 XML object 这将允许 XML 相关函数来解释数据。

如果有其他问题,请告诉我,如果它不起作用,也请告诉我。

一切顺利。

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM