使用bigrquery创建含GeoJSON数据的BigQuery表报Unsupported type: list错误
问题原因
你遇到的Erro: Unsupported type: list报错,核心原因是geo_js_df中的geometry列为R的列表类型,bigrquery的as_bq_fields()函数无法自动将R列表类型映射为BigQuery支持的字段类型,即使列表中存储的是符合要求的WKT地理字符串,也需要手动指定字段类型映射。
解决步骤
步骤1:将geometry列转换为普通字符向量
当前geometry列的WKT字符串被包裹在列表结构中,首先将其展开为普通字符列:
geo_js_df$geometry <- unlist(geo_js_df$geometry)
步骤2:手动构造BQ字段映射规则
跳过geometry列的自动识别,手动将其指定为BigQuery的GEOGRAPHY地理类型:
# 生成除geometry外其他字段的默认映射 fields <- as_bq_fields(geo_js_df[, !names(geo_js_df) %in% "geometry"]) # 手动添加geometry字段的类型配置 fields <- c(fields, list(bq_field(name = "geometry", type = "GEOGRAPHY")))
步骤3:重新执行建表操作
bq_table_create(x = players_table, fields = fields)
建表完成后,你可以直接用bq_table_upload()或者dbWriteTable()上传geo_js_df数据,BigQuery会自动将WKT字符串解析为GEOGRAPHY类型存储。
备选方案:直接上传GeoJSON文件
如果你已经导出了换行分隔的GeoJSON文件,可以不用转换为R数据框,直接调用bq_table_load()上传,指定源格式为NEWLINE_DELIMITED_JSON即可,BigQuery会自动识别地理字段:
bq_table_load( x = players_table, source = "你的换行分隔GeoJSON文件路径", source_format = "NEWLINE_DELIMITED_JSON" )
内容的提问来源于stack exchange,提问作者Leprechault
相关产品推荐
相关产品推荐

