问题描述
我正在使用Apache Airflow编写DAG,它将获取保存在Google云存储桶中的.csv文件,并在BigQuery中使用该文件制作表格。我遇到的问题是,我无法控制.csv文件的格式(它是从互联网上获取的),并且创建该文件的人还是选择了逗号作为文件定界符,即使数据集中的某些字符串中包含逗号也是如此。不想被视为字段分隔符。
可以在https://www.kaggle.com/mylesoneill/world-university-rankings?select=cwurData.csv处找到数据,并且在第十行中可以看到大学名中有一个逗号。
在我的DAG任务中,我将quote_character定义为“,当我运行DAG时,它返回成功,但是BigQuery中没有创建表。这是我导入的包(问题可能在这里,我尝试了和不从airflow.contrib.operators.bigquery_operator导入BigQueryCreateExternalTableOperator):
# Import packages
from airflow import DAG
from airflow.contrib.operators.bigquery_operator import BigQueryOperator
from airflow.contrib.operators.bigquery_operator import BigQueryCreateExternalTableOperator
from airflow.operators.dummy_operator import DummyOperator
from datetime import datetime,timedelta
from airflow.contrib.operators.gcs_to_bq import GoogleCloudStoragetoBigQueryOperator
from airflow.contrib.operators.bigquery_check_operator import BigQueryCheckOperator
这是我遇到的任务:
#Load data from GCS to BQ
load_cwurData = GoogleCloudStoragetoBigQueryOperator(
task_id = 'load_cwurData',bucket = gs_bucket,source_objects = ['cwurData.csv'],destination_project_dataset_table = f'{project_id}:{staging_dataset}.cwurData_table',write_disposition='WRITE_TruncATE',source_format = 'csv',field_delimiter =',',quote_character = '"',skip_leading_rows = 1,schema_fields=[
{'name': 'world_rank','type': 'INTEGER','mode': 'NULLABLE'},{'name': 'institution','type': 'STRING',{'name': 'country',{'name': 'national_rank',{'name': 'quality_of_education',{'name': 'alumni_employment',{'name': 'quality_of_faculty',{'name': 'publications',{'name': 'influence',{'name': 'citations',{'name': 'broad_impact',{'name': 'patents',{'name': 'score','type': 'FLOAT',{'name': 'year',]
)
我的问题是如何使quote_character参数起作用? 或者,是否有另一种方法可以读取此数据而不必将文件定界符更改为类似管道的内容?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)