数据加载到雪花表中 - 几何数据

Posted

技术标签:

【中文标题】数据加载到雪花表中 - 几何数据【英文标题】:Data Load into Snowflake table - Geometry data 【发布时间】:2020-10-19 00:56:13 【问题描述】:

我需要将包含几何数据的 csv 文件加载到雪花表中。 我正在使用 Snowflake WebGUI 中提供的数据加载选项。

示例几何数据如下。

LINESTRING (-118.808186210713 38.2287933407744, -118.808182249848 38.2288155788245, -118.807079844554 38.2293234553217, -118.806532314702 38.229961732287, -118.80625724007 38.2306350645631, -118.805071970015 38.231849721603, -118.804097093763 38.2325380450286, -118.803504299857 38.2328501734747, -118.802726055048 38.2332839062976, -118.802126140311 38.2334442483131, -118.801758172942 38.233542312624)

由于几何数据中存在逗号,因此数据加载选项会将它们视为单独的列并引发错误。

我尝试使用下面的“to_geography”函数更新 csv 文件,但仍然没有成功。

TO_GEOGRAPHY(LINESTRING (-118.808186210713 38.2287933407744, -118.808182249848 38.2288155788245, -118.807079844554 38.2293234553217, -118.806532314702 38.229961732287, -118.80625724007 38.2306350645631, -118.805071970015 38.231849721603, -118.804097093763 38.2325380450286, -118.803504299857 38.2328501734747, -118.802726055048 38.2332839062976, -118.802126140311 38.2334442483131, -118.801758172942 38.233542312624))

因此,任何关于此的指针将不胜感激,csv 文件的完整内容如下。

ID,"    GEOGRAPHIC_ROUTE",Name
12421,"LINESTRING (-118.808186210713 38.2287933407744, -118.808182249848 38.2288155788245, -118.807079844554 38.2293234553217, -118.806532314702 38.229961732287, -118.80625724007 38.2306350645631, -118.805071970015 38.231849721603, -118.804097093763 38.2325380450286, -118.803504299857 38.2328501734747, -118.802726055048 38.2332839062976, -118.802126140311 38.2334442483131, -118.801758172942 38.233542312624)",Winston

【问题讨论】:

你能分享一下你的文件格式的定义吗? "TYPE": "CSV", "RECORD_DELIMITER": "\n", "FIELD_DELIMITER": ",", "FILE_EXTENSION": null, "SKIP_HEADER": 1, "DATE_FORMAT": “AUTO”、“TIME_FORMAT”:“AUTO”、“TIMESTAMP_FORMAT”:“AUTO”、“BINARY_FORMAT”:“HEX”、“ESCAPE”:“NONE”、“ESCAPE_UNENCLOSED_FIELD”:“\\”、“TRIM_SPACE”:真, "FIELD_OPTIONALLY_ENCLOSED_BY": "NONE", "NULL_IF": ["\\N"], "COMPRESSION": "AUTO", "ERROR_ON_COLUMN_COUNT_MISMATCH": true, "VALIDATE_UTF8": true, "SKIP_BLANK_LINES": false, "REPLACE_INVALID_CHARACTERS" :假,“EMPTY_FIELD_AS_NULL”:真,“SKIP_BYTE_ORDER_MARK”:真,“编码”:“UTF8” 以上是文件格式 嗨 - 如果您有包含分隔符的字段,那么您需要用引号(或其他适当的字符)将您的字段括起来并更新您的文件格式以反映这一点,即更改此行:“ FIELD_OPTIONALLY_ENCLOSED_BY”:“无”, 【参考方案1】:

正如我所见,这些字段用双引号括起来,以防止对地理数据的逗号字符的误解(这很好!

能否将您的文件格式的 FIELD_OPTIONALLY_ENCLOSED_BY 设置为 '"'(双引号),尝试重新导入文件?

https://docs.snowflake.com/en/sql-reference/sql/create-file-format.html#format-type-options-formattypeoptions

我可以使用以下 COPY 命令提取样本数据:

copy into TEST_TABLE from @my_stage
FILE_FORMAT = (type = csv, FIELD_OPTIONALLY_ENCLOSED_BY='"', skip_header =1 );

【讨论】:

以上是关于数据加载到雪花表中 - 几何数据的主要内容,如果未能解决你的问题,请参考以下文章

在上次数据加载查询中出现验证错误时出错

如何检查从 aws S3 到雪花的数据加载结果

雪花数据加载最佳实践规范化还是非规范化?

由于数据中的“雪花问题”导致部分加载

使用 Python 将数据写入雪花

插入时的雪花微分区