Google bigquery 在python脚本中将以制表符分隔的文件从gcs加载到Bigquery时出错
我正在使用Python脚本将文件从GCS加载到Bigquery。加载逗号分隔的文件(默认情况下)时,它会起作用。但是,在设置以下作业属性后尝试加载以制表符分隔的文件时:Google bigquery 在python脚本中将以制表符分隔的文件从gcs加载到Bigquery时出错,google-bigquery,Google Bigquery,我正在使用Python脚本将文件从GCS加载到Bigquery。加载逗号分隔的文件(默认情况下)时,它会起作用。但是,在设置以下作业属性后尝试加载以制表符分隔的文件时: job.allowQuotedNewlines=True job.fieldDelimiter='\t' job.skipLeadingRows=1 job.maxBadRecords=9999999 通过以下方式插入作业: job.begin() 它给出了以下错误: "errors": [ {
job.allowQuotedNewlines=True
job.fieldDelimiter='\t'
job.skipLeadingRows=1
job.maxBadRecords=9999999
通过以下方式插入作业:
job.begin()
它给出了以下错误:
"errors": [
{
"reason": "invalid",
"message": "Too many errors encountered."
},
{
"reason": "invalid",
"location": "gs://my-test/test-file",
"message": "CSV table references column position 1, but line starting at position:0 contains only 1 columns."
}
它还在寻找逗号分隔符吗?看起来脚本中设置的所有属性都不是API实际使用的。
我错过了什么
以下是我尝试加载的文件中的两行:
0265cd91-3126-4f54-a7e3-54be3ef2d8f9 357215cb-c073-4e67-bfdb-7085f8709015 398a9017-1157-4891-aacb-8108c5fb6378 6bb1f59a-81bb-49da-9974-193a23cb3bca test B test2 B 0 2017-03-21 18:48:32 2017-03-21 18:48:32
02aa9715-e47b-4cd9-89f8-a091f7a6e81d 1186dfc3-3b2f-456a-be06-bf5f5a0f7c12 398a9017-1157-4891-aacb-8108c5fb6378 e1983ef2-d7a1-49ce-9fe2-a5cd439b8ca0 test A test2 A 0 2017-06-26 14:37:43 2017-06-26 14:37:43
以下是vim中“设置列表”后的相同两行。如您所见,分隔符为“^I”:
以下是完整的代码:
dest_dataset = "temp"
dest_table = "lineItems_copy"
destination = self.bq_client.dataset(dest_dataset).table(name=dest_table)
source_files = "gs://my-test/test-*"
job_id = "load_gcs_file_to_bq_" + str(uuid.uuid4())
print ("job_id= ", job_id)
job = self.bq_client.load_table_from_storage(job_id, destination, source_files)
job_properties = {'createDisposition': 'CREATE_NEVER', 'sourceFormat': 'CSV', 'writeDisposition': 'WRITE_APPEND'}
#testing with tab-delimited:
job.allowQuotedNewlines=True
job.fieldDelimiter='\t'
job.skipLeadingRows=1
job.maxBadRecords=9999999
submit_async_load_job(self.bq_client, self.cloud_logger, job, job_id, job_properties)
def submit_async_load_job(bq_client, logger, job, job_id, load_job_options):
for key, value in load_job_options.iteritems():
print ("key value: " , key, " ", value)
set_property = 'job.' + key + '="'+value+'"'
print set_property
exec(set_property)
job.begin()
wait_for_job(logger, job, job_id)
return
感谢您的帮助。问题在于属性名称:使用此API提交加载作业时,属性的拼写不同,例如:job.fieldDelimiter='\t'应该是
job.field_delimiter='\t'
你能给我们看一下你的一行文件作为我们分析的样本吗?你能发布你的完整代码吗?只是添加了样本数据和整个代码。感谢您的帮助。粘贴的两行不包含制表符-因此制表符不是分隔符,或者我们试图调试错误的文件-它们是制表符delim。我下载了文件并在Vim和set列表中打开了它,参数显示为“^I”,我知道这是选项卡的表示形式
job.field_delimiter='\t'