如何使用带有 nodejs 的 bigquery 插入方法插入地理类型数据

Posted

技术标签:

【中文标题】如何使用带有 nodejs 的 bigquery 插入方法插入地理类型数据【英文标题】:How to insert geography type data using bigquery insert method with nodejs 【发布时间】:2020-07-31 14:22:35 【问题描述】:

我正在使用 Node 库与 BigQuery 集成。想知道如何使用 Table.insert 方法将 Geography 数据类型值存储在 Table 中。我尝试了一些类似下面的东西,但给出了错误

const options = 
datasetId: 'mydataset',
tableId: 'mytable', 
rows: [
  
    rec1:"raj",
    rec2:"geography::Point('-6', '6', 4326)"
  
] 

const table = await bigqueryClient
.dataset(options.datasetId)
.table(options.tableId) 
table.insert(options.rows, (err, resp) => 
if (err) 
  console.log('*****err', err)
 else 
  console.log('*****resp', resp)
  )

或者实现这一点的唯一方法是在 BigQuery 客户端上使用查询方法,查询格式如下?

insert `bigqueryproject1-279307.mydataset.mytable` (rec1,rec2) values ('raj', ST_GEOGPOINT(-6, 6) )

【问题讨论】:

【参考方案1】:

首先尝试使用架构创建表。类似this

const schema = [
    
    name: 'rec1',
    type: 'STRING',
    ,
    
    name: 'rec2',
    type: 'GEOGRAPHY',
    
];
    
const options = 
    schema: schema,
;

const [table] = await bigquery
    .dataset('mydataset')
    .createTable('mytable', options);

然后尝试插入具有 GEOG 数据类型的数据。我建议使用 geojson 格式的 geom 数据,而 wkt 格式有时无法正确导入(根据我的经验)

    
    "type": "Point",
    "coordinates": [
        -6,
        6
    ]

【讨论】:

嗨 Jozef,您的意思是像这样传递价值? const options = datasetId: 'mycreatedataset1', tableId: 'newTabelwithAllDatatype', rows: [ rec1:"raj", rec11: "type": "Feature", "properties": , "geometry": " type": "Point", "coordinates": [ -6, 6] ] 同时创建新行? 是的,类似这样,但是将您的 JSON 字符串化并像字符串一样使用它 我得到以下错误“无法转换值 '\"type\":\"Feature\",\"properties\":,\"geometry\":\"type\ ":\"Point\",\"coordinates\":[-6,6]' 到 GEOGRAPHY:GeoJSON 阅读器接受 Geometry 对象,而不是 Feature 或 FeatureCollection 对象","re​​ason":"invalid"],"行":"id":"sidd","location":"\"type\":\"Feature\",\"properties\":,\"geometry\":\"type\ ":\"点\",\"坐标\":[-6,6]"],"名称" 我的错,我更正了我的答案。您只需要几何内部的 json 使用这种格式可以正常工作 "type": "GeometryCollection", "geometries": [ "type": "Point", "coordinates": [-70, 50] ]

以上是关于如何使用带有 nodejs 的 bigquery 插入方法插入地理类型数据的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:关于使用 nodejs 删除和更新行的问题

如何从 bigquery nodejs api 获取整数?

IN()表达式中的nodejs bigquery参数化查询

如何使用 DML 语法在 BigQuery 中插入带有 RECORD 字段的记录?

如何在 bigquery 中使用带有 JSON EXTRACT 的正则表达式

nodejs如何让for循环等到运行下一个循环实例