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

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

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

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

Итак, мой вопрос: как установить местоположение (зону и регион) для набора данных 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 и использовал его в коде, не создавая его там. Теперь будет вызвано исключение, если набор данных не существует, что запрещает создание набора в коде, который приведет к местоположению по умолчанию в США.


person Matthias    schedule 07.03.2018    source источник


Ответы (2)


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

person Jinjun    schedule 12.03.2018
comment
Действительно, но такой опции не существует. Похоже, клиентские библиотеки реализованы не полностью. - person Matthias; 12.03.2018
comment
Если вы считаете, что эта функция отсутствует, вы можете подать запрос на функцию через cloud.google. com/support/docs/issue-trackers. - person Jinjun; 13.03.2018

Местоположение 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

person Taavi    schedule 20.04.2018