Как выполнить пакетную загрузку данных в Google Cloud Spanner с помощью клиентской библиотеки Python? - PullRequest
0 голосов
/ 14 февраля 2019

Я бы хотел поместить содержимое фрейма данных pandas в таблицу в базе данных Google Cloud Spanner.Документация здесь рекомендует использовать метод insert_or_update() объекта пакета.

Если пакетный объект создается с помощью этого

from google.cloud import spanner_v1
client = spanner_v1.Client()
batch = client.batch()

, тогда этот объект не имеет этого метода.Запуск dir(client) дает мне эти результаты

['SCOPE', 
'_SET_PROJECT', 
'__class__', 
'__delattr__', 
'__dict__', 
'__dir__', 
'__doc__', 
'__eq__', 
'__format__', 
'__ge__', 
'__getattribute__', 
'__getstate__', 
'__gt__', 
'__hash__', 
'__init__', 
'__init_subclass__', 
'__le__', 
'__lt__', 
'__module__', 
'__ne__', 
'__new__', 
'__reduce__', 
'__reduce_ex__', 
'__repr__', 
'__setattr__', 
'__sizeof__', 
'__str__', 
'__subclasshook__', 
'__weakref__', 
'_credentials', 
'_database_admin_api', 
'_determine_default', 
'_http', 
'_http_internal', 
'_instance_admin_api', 
'_item_to_instance', 
'copy', 
'credentials', 
'database_admin_api', 
'from_service_account_json', 
'instance', 
'instance_admin_api', 
'list_instance_configs', 
'list_instances', 
'project', 
'project_name', 
'user_agent']

Как сделать пакетный переход в Spanner?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Если у вас есть фрейм данных pandas, здесь случайным образом 5 x 3 со столбцами a, b, c, вы можете преобразовать фрейм данных в имена столбцов, а также в строки и пакетную вставку.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 3)),
                  columns=['a', 'b', 'c'])

Вы можетевставьте это в Google Cloud Spanner, извлекая столбцы и значения из df и пакетно вставляя.

from google.cloud import spanner

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

columns = df.columns
values = df.values.tolist()

with database.batch() as batch:
    batch.insert(
        table='table',
        columns=columns
        values=values
    )
0 голосов
/ 14 февраля 2019

У фрагментов есть пример пакетной вставки.Я проверил, что пакетный объект, созданный во фрагменте, также имеет поле insert_or_update.

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/spanner/cloud-client/snippets.py#L72

[' class ', ' delattr ',' dict ',' документ ',' введите ',' выход ',' формат ',' getattribute ',' hash ',' init ',' module ',' new ',' уменьшите ',' redu_ex ',' repr ',' setattr ',' sizeof ',' str ',' subclasshook ',' weakref ',' _check_state ',' _mutations ',' _session ',' commit ',' commit',' удалить ',' вставить ',' insert_or_update ',' replace ',' update ']

Можете ли вы попробовать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...