Мне нужно записать фрейм данных Polars в таблицу BigQuery. Таблица разделена по дате.
Когда мне нужно запустить сценарий обратного заполнения, я перебираю диапазон дат, получаю данные из какого-то источника (в данном случае API), конвертирую их в фрейм данных, немного манипулирую и записываю их в таблицу BQ.
Но вместо того, чтобы перезаписать раздел на эту дату, он перезаписывает всю таблицу?
Как я могу только перезаписать раздел?
Мой код на данный момент:
import polars as pl
from google.cloud import bigquery
# create period_range from internal util_package
for date in period_range:
data = "get some API data here per date"
df = pl.read_csv(data).select(pl.col(pl.INT64)
client = bigquery.Client()
with io.BytesIO() as stream:
df.write_parquet(stream)
stream.seek(0)
job = client.load_table_from_file(
file_obj=stream,
destination = "analytics.ads.vendor_name",
project = "mycompany_ads",
location = "EU",
job_config=bigquery.LoadJobConfig(
source_format=bigquery.SourceFormat.PARQUET,
time_partitioning=bigquery.TimePartitioning(
type_=bigquery.TimePartitioningType.DAY,
field = "date", # name of column to use for partitioning
require_partition_filter=True,
),
clustering_fields=["domain", "type", "placement"],
autodetect=True,
schema=None,
write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE,
),
)
job.result() # Waits for the job to complete
print("ETL finished")
Я считаю, что эти два вопроса должны решить вашу проблему
Отказ от ответственности: я не тестировал упомянутое решение.
Документация по ссылке на раздел с $
здесь
Большое спасибо, использование
destination=f"analytics.ads.vendor_name${str(day).replace("-", "")}"
решило проблему.