Google Cloud DataLab + BigQuery: как установить регион / зону / местоположение

Я использую Datalab для ноутбука Python, который загружает данные из облачного хранилища в BigQuery, в основном, следуя этому примеру.

Затем я увидел, что мои исходные данные в хранилище Cloud Storage находятся в ЕС (eu-west3-a), виртуальная машина, выполняющая Datalab, находится в том же регионе, но окончательные данные в BigQuery находятся в США.

В соответствии с этим постом я попытался установить местоположение для набора данных в коде, но не сработало. Это связано с тем, что в модуле Python Datalab.Bigquery нет такой опции.

Поэтому мой вопрос: как мне установить местоположение (зону и регион) для набора данных BigQuery и содержащих его таблиц?

Это мой код:

# data: https://www.kaggle.com/benhamner/sf-bay-area-bike-share/data
%%gcs read --object gs://my_bucket/kaggle/station.csv --variable stations

# CSV will be read as bytes first
df_stations = pd.read_csv(StringIO(stations))
schema = bq.Schema.from_data(df_stations)
# Create an empty dataset
#bq.Dataset('kaggle_bike_rentals').create(location='europe-west3-a')
bq.Dataset('kaggle_bike_rentals').create()

# Create an empty table within the dataset
table_stations = bq.Table('kaggle_bike_rentals.stations').create(schema = schema, overwrite = True)

# load data directly from cloud storage into the bigquery table. the locally loaded Pandas dataframe won't be used here
table_stations.load('gs://my_bucket/kaggle/station.csv', mode='append', source_format = 'csv', csv_options=bq.CSVOptions(skip_leading_rows = 1))

Обновление: тем временем я вручную создал набор данных в веб-интерфейсе BigQuery и использовал его в коде, не создавая его там. Теперь будет сгенерировано исключение, если набор данных не существует, что запрещает создавать один в коде, который приведет к расположению по умолчанию US.

2 ответа

Вы пробовали bq.Dataset('[your_dataset]'). Create(location='EU')?

Расположение BigQuery задается на уровне набора данных. Таблицы занимают свое местоположение на основе набора данных, в котором они находятся.

Установка местоположения набора данных по крайней мере за пределами Datalab:

from google.cloud import bigquery
bigquery_client = bigquery.Client(project='your_project')

dataset_ref = bigquery_client.dataset('your_dataset_name')
dataset = bigquery.Dataset(dataset_ref)
dataset.location = 'EU'

dataset = bigquery_client.create_dataset(dataset)

На основе фрагмента кода здесь: https://cloud.google.com/bigquery/docs/datasets

Другие вопросы по тегам