Загрузка Bigquery CSV не удается с Python API, но успешно с использованием графического интерфейса - PullRequest
0 голосов
/ 16 января 2019

Я использую Python для создания файла CSV и загрузки его в BigQuery. Тем не менее, он не может загрузить со следующей ошибкой:

Ошибка при чтении данных, сообщение об ошибке: столбец ссылок таблицы CSV позиция 4, но строка начинается с позиции: 4137 содержит только 2 столбцы.

Конфигурация, которую я использую, выглядит следующим образом:

job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.CSV
job_config.ignore_unknown_values = False
job_config.autodetect = False
job_config.field_delimiter = '|'
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.max_bad_records = 0
job_config.skip_leading_rows = 0

Пример записи выглядит так:

2c | Блэкхок сошел с ума | Это почти правильно | Good Times & Great Country; 2019-01-16 14: 22: 07

CSV имеет всего 114 записей. Когда я установил job_config.allow_quoted_newlines = True. Он загружает только 60 строк или число строк меньше 114.

Создание файла CSV следующим образом:

f.write((str(callsign).split('_')[0]).lower().encode('utf-8') + '|' + artist.encode('utf-8') + '|' + song_title.encode('utf-8') + '|' + show_title.encode('utf-8') + '|' + str(time_bq).encode('utf-8') + '\n')

def bq_load():
credential_path = "Key.json"
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credential_path

bigquery_client = bigquery.Client()
dataset_ref = bigquery_client.dataset('POC')
table_ref = dataset_ref.table('data_poc')
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.CSV
job_config.ignore_unknown_values = False
job_config.autodetect = False
job_config.field_delimiter = '|'
job_config.allow_quoted_newlines = True
job_config.allow_jagged_rows = True
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.max_bad_records = 0
job_config.skip_leading_rows = 0

with open('current_song.csv', 'rb') as source_file:
    job = bigquery_client.load_table_from_file(
        source_file,
        table_ref,
        location='US',  # Must match the destination dataset location.
        job_config=job_config)  # API request

try:
    print job.job_id
    job.result()  # Waits for table load to complete.
    return 'Success'
except Exception as ex:
    logger.error(
        "The following exception occurred in the table load of job - {} {} ".format(ex, format(job.job_id)))
    return 'Failure'

Нужно загрузить полное содержимое CSV в bigquery. Любая помощь в определении причины этой ошибки будет очень полезна

1 Ответ

0 голосов
/ 16 января 2019

Вы используете разные разделители для ввода между примерами BigQuery и Python.

Примечание. В вашем образце используются разделители труб, а в полях - точки с запятой.

2c|Blackhawk gone wild|That's Just About Right|Good Times & Great Country;2019-01-16 14:22:07

В вашем коде Python используются разделители точек с запятой:

job_config.field_delimiter = ';'

В вашем Bigquery используются разделители труб:

job_config.field_delimiter = '|'

На основе вашего примера BigQuery измените свой код Python, чтобы он соответствовал:

job_config.field_delimiter = '|'

Примечание: я не знаю, почему вы включили свою первую строку кода:

f.write((str(callsign).split('_')[0]).lower().encode('utf-8') + ';' + artist.encode('utf-8') + ';' + song_title.encode('utf-8') + ';' + show_title.encode('utf-8') + ';' + str(time_bq).encode('utf-8') + '\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...