Я хотел создать фиктивные данные для моего тестирования. Итак, я создал несколько фиктивных данных, используя 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"
}
]
Мне нужны более лучшие предложения для достижения этой цели.