1

DataFramePandas からBigQuery テーブルにデータを読み込もうとしています。DataFrameには dtype の列があり、datetime64[ns]を使用して df を保存しようとするとload_table_from_dataframe()

google.api_core.exceptions.BadRequest: 400 提供されたスキーマがテーブル [テーブル名] と一致しません。フィールド compute_triggered_time のタイプが DATETIME から TIMESTAMP に変更されました。

テーブルには次のスキーマがあります

CREATE TABLE `[table name]` (
  ...
  computation_triggered_time    DATETIME  NOT NULL,
  ...
)

DataFrameは列ですcomputation_triggered_timedatetime64[ns]CSV からオリジナルを読み取ると、次のDataFrameようにテキストから日時に変換します。

df['computation_triggered_time'] = \ 
  df.to_datetime(df['computation_triggered_time']).values.astype('datetime64[ms]')

ノート:

PyArrow を使用して df をシリアル化し、データの精度がナノ秒の場合は失敗するため、この.values.astype('datetime64[ms]')部分が必要です。load_table_from_dataframe()エラーは次のようなものです

[...] タイムスタンプ [ns] からタイムスタンプ [ms] にキャストすると、データが失われます

4

1 に答える 1