在多部分 http 请求中指定驻留在文件上的 bigquery 表架构
Posted
技术标签:
【中文标题】在多部分 http 请求中指定驻留在文件上的 bigquery 表架构【英文标题】:Specifying bigquery table schema that resides on a file in a multipart http request 【发布时间】:2012-06-12 12:40:19 【问题描述】:我有一个文本文件 schema.txt,其中定义了我要创建的表的架构。
我想将此文件包含在用于创建表的多部分 HTTP 请求中。
如何在多部分 HTTP 请求中指定 schema.txt 文件?
以下是我目前正在做的事情(虽然没有工作):
def loadTable(service, projectId, datasetId, targetTableId, sourceCsv, filenm):
try:
jobCollection = service.jobs()
jobData =
'projectId': projectId,
'configuration':
'load':
'sourceUris': [sourceCsv],
'schema': filenm,
'destinationTable':
'projectId': projectId,
'datasetId': datasetId,
'tableId': targetTableId
,
'createDisposition': 'CREATE_IF_NEEDED',
'writeDisposition': 'WRITE_TRUNCATE',
'encoding': 'UTF-8'
filenm
将是“schema.txt”。
我知道我可以直接将架构指定为:
'schema':
'fields': [
'name': 'level',
'type': 'STRING',
,
'name': 'message',
'type': 'STRING',
]
,
但我想指定包含架构的文件。
【问题讨论】:
【参考方案1】:嗯,除非您直接从文件中提取,否则不确定为什么需要“多部分 HTTP 请求”。您在此处指定一个 CSV 输入,表示一个 Cloud Storage 对象。
查看此处了解更多信息: https://developers.google.com/bigquery/docs/developers_guide#storageimport
无论如何,这并不是一个真正的 BigQuery 问题,而是一个 Python 问题。你是这个意思吗?
import json
def loadTable(project_id, dataset_id, target_table, source_csv, filename):
file = open(filename, 'r')
schema = file.read()
file.close()
schema_json = json.loads('%s' % schema)
job_data =
"projectId": project_id,
"configuration":
"load":
"sourceUris": [source_csv],
"schema": schema_json,
"destinationTable":
"projectId": project_id,
"datasetId": dataset_id,
"tableId": target_table
,
"createDisposition": "CREATE_IF_NEEDED",
"writeDisposition": "WRITE_TRUNCATE",
"encoding": "UTF-8"
print json.dumps(job_data, indent=2)
loadTable('project_id', 'dataset_id', 'target_table', 'source_csv', '/tmp/schema.txt')
【讨论】:
以上是关于在多部分 http 请求中指定驻留在文件上的 bigquery 表架构的主要内容,如果未能解决你的问题,请参考以下文章
如何在多部分/表单数据请求中发送对象而不在 Angular 中转换为字符串