Сгенерируйте данные Faker из python и загрузите их во вложенную таблицу BigQuery. - PullRequest
1 голос
/ 20 февраля 2020

Я хотел создать фиктивные данные для моего тестирования. Итак, я создал несколько фиктивных данных, используя faker, затем я загрузил этот объект в pandas dataframe. Но моя целевая таблица BigQuery имеет вложенный массив.

И мне нужно выполнить некоторые вычисления на более сложном объекте, например, если destination равно 'sometext', тогда route должно быть пустым, иначе добавьте origin и destination.

ниже - мой существующий код.

from google.cloud import bigquery
from google.oauth2 import service_account
import pandas as pd
from faker import Factory
import random
import uuid
import string
import datetime
from datetime import date

def test():
    return{ 'user_uuid':uuid.uuid4(),
            'origin':random.choice(airport) ,
            'destination':random.choice(airport),
            'route':  'origin' + 'destination',
            'app': {'version':'','model':{'name':''},'id':'','type':''},
            'passenger':{'title':'','firstname':'','lastname':''},
            'datetime':'',
            }

example_dummy_data = pd.DataFrame([test() for _ in range(2)])

pandas_gbq.to_gbq(example_dummy_data, 'dataset.table', project_id='project', if_exists='append')

Моя структура таблицы

[
  {
    "name": "user_uuid",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "origin",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "destination",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "route",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "app",
    "type": "RECORD",
    "mode": "NULLABLE",
    "fields": [
      {
        "name": "version",
        "type": "STRING",
        "mode": "NULLABLE"
      },
      {
       "name": "model",
       "type": "RECORD",
       "mode": "REPEATED",
       "fields": [
          {
          "name": "name",
          "type": "STRING",
          "mode": "NULLABLE"
          }
        ]
      },
      {
        "name": "id",
        "type": "STRING",
        "mode": "NULLABLE"
      },
      {
        "name": "type",
        "type": "STRING",
        "mode": "NULLABLE"
      }
    ]
  },
  {
    "name": "customer",
    "type": "RECORD",
    "mode": "REPEATED",
    "fields": [
   {
        "name": "title",
        "type": "STRING",
        "mode": "NULLABLE"
    },
    {
        "name": "firstname",
        "type": "STRING",
        "mode": "NULLABLE"
    },
    {
        "name": "lastname",
        "type": "STRING",
        "mode": "NULLABLE"
    }
    ]
  },
  {
    "name": "datetime",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
  }

]

Мне нужны более лучшие предложения для достижения этой цели.

1 Ответ

0 голосов
/ 21 февраля 2020

Библиотека pandas_gbq не поддерживает вложенные или повторяющиеся поля.

Вместо этого можно попробовать библиотеку google-cloud-bigquery, которая поддерживает эти поля. Вы можете найти подробную информацию о том, как загрузить DataFrames в BigQuery, используя эту библиотеку здесь .

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