Хорошо, я сам потратил время на то, чтобы воспроизвести эту проблему, чтобы дать вам правильный ответ, и вот что я нашел.
Если вы хотите установить другой разделитель по умолчанию "," при загрузке данных в BigQuery, вам нужно указать это в вашем job_config:
job_config.field_delimiter = ";"
Вот и все. Вы можете узнать больше об опциях и различных разделителях, которые вы можете использовать, читая здесь, в документации .
Мой последний код такой (поскольку я использую Cloud Console Shell, я пропускаю несколько конфигураций учетных данных).
# Libraries
import csv
import logging
import os
# import cloudstorage as gcs
import gcloud
from gcloud import storage
from google.cloud import bigquery
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
import json
import mysql.connector
# connecting to the DB
cnx = mysql.connector.connect(user="user", password="pass", host="11.111.111.11", database="test")
cursor = cnx.cursor()
SQLview = 'select * from test'
filename = 'test_google2.csv'
folder = "folder_path_to_file"
# Creating CVS file
cursor.execute(SQLview)
with open(filename, 'w', newline= '') as f:
writer = csv.writer(f, delimiter=';')
writer.writerow([ i[0] for i in cursor.description ])
writer.writerows(cursor.fetchall())
# uploading it into a bucket
def upload_blob(bucket_name, source_file_name, destination_blob_name):
storage_client = storage.Client(project="project_name")
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_name)
print('File {} uploaded to {}'.format(
source_file_name,
destination_blob_name
))
# inserting the csv from Cloud Storage into BigQuery
def insert_bigquery(target_uri, dataset_id, table_id):
bigquery_client = bigquery.Client(project="project_name")
dataset_ref = bigquery_client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.skip_leading_rows = 1
job_config.source_format = bigquery.SourceFormat.CSV
job_config.field_delimiter = ";"
uri = target_uri
load_job = bigquery_client.load_table_from_uri(
uri,
dataset_ref.table(table_id),
job_config=job_config
)
print('Starting job {}'.format(load_job.job_id))
load_job.result()
print('Job finished.')
upload_blob("bucket_name", folder + filename, filename)
insert_bigquery("gs://bucket_name/"+filename, "dataset_id", "table_id")