- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个填充了多边形的地理数据框的几何列,我需要将它们上传到 Snowflake。
我一直在将 geodataframe 的几何列导出到文件,并尝试了 CSV 和 GeoJSON 格式,但到目前为止,我要么总是收到错误,要么临时表总是空着。
这是我的代码:
design_gdf['geometry'].to_csv('polygons.csv', index=False, header=False, sep='|', compression=None)
import sqlalchemy
from sqlalchemy import create_engine
from snowflake.sqlalchemy import URL
engine = create_engine(
URL(<Snowflake Credentials Here>)
)
with engine.connect() as con:
con.execute("PUT file://<path to polygons.csv> @~ AUTO_COMPRESS=FALSE")
然后在 Snowflake 上运行
create or replace table DB.SCHEMA.DESIGN_POLYGONS_STAGING (geometry GEOGRAPHY);
copy into DB.SCHEMA."DESIGN_POLYGONS_STAGING"
from @~/polygons.csv
FILE_FORMAT = (TYPE = CSV FIELD_DELIMITER = '|' SKIP_HEADER = 1 compression = None encoding = 'iso-8859-1');
生成以下错误:
“文件 (6) 中的列数与对应表 (1) 中的列数不匹配,使用文件格式选项 error_on_column_count_mismatch=false 忽略此错误文件‘@~/polygons.csv.gz’,第 3 行, character 1 Row 1 starts at line 2, column "DESIGN_POLYGONS_STAGING"[6] 如果您想在遇到错误时继续加载,请为 ON_ERROR 选项使用其他值,例如“SKIP_FILE”或“CONTINUE”。有关更多信息加载选项,请在 SQL 客户端中运行 'info loading_data'。”
谁能指出我做错了什么?
最佳答案
受@Simeon_Pilgrim 评论的启发,我回到了 Snowflake 的文档。我在那里找到了一个将字符串文字转换为 GEOGRAPHY 的示例。
https://docs.snowflake.com/en/sql-reference/functions/to_geography.html#examples
select to_geography('POINT(-122.35 37.55)');
我的多边形看起来更像是描述多边形的字符串,而不是实际的 GEOGRAPHY,因此我决定需要将它们视为字符串,然后对它们调用 TO_GEOGRAPHY()。
我很快发现它们需要用单引号显式括起来并复制到登台表的 VARCHAR 列中。这是通过修改 CSV 导出代码实现的:
import csv
design_gdf['geometry'].to_csv(<path to polygons.csv>,
index=False, header=False, sep='|', compression=None, quoting=csv.QUOTE_ALL, quotechar="'")
暂存表现在看起来像:
create or replace table DB.SCHEMA."DESIGN_POLYGONS_STAGING" (geometry VARCHAR);
我在复制到与 polygons.csv.gz 文件相关的暂存表时遇到了更多问题,我一定是在之前的实验中上传了该文件。我使用以下方法删除了这个文件:
remove @~/polygons.csv.gz
最后,将暂存表转换为GEOGRAPHY
create or replace table DB.SCHEMA."DESIGN_GEOGRAPHY_STAGING" (geometry GEOGRAPHY);
insert into DB.SCHEMA."DESIGN_GEOGRAPHY"
select to_geography(geometry)
from DB.SCHEMA."DESIGN_POLYGONS_STAGING"
最后我得到了一个 DESIGN_GEOGRAPHY 表,其中有一列 GEOGRAPHY。成功!!!
关于upload - 如何将多边形从 GeoPandas 上传到 Snowflake?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71150967/
我是一名优秀的程序员,十分优秀!