5
2

More than 3 years have passed since last update.

Google Cloud Composer で Bigquery にロード時 「Error: Bad character (ASCII 0) encountered.」の回避策

Posted at

環境

  • Google Cloud Composer (Airflow 1.10.2-composer)

背景

GoogleCloudStorageToBigQueryOperator を使った csv ファイルを Bigquery にロードする処理で、下記のエラーが発生しました。

「Error while reading data, error message: Error detected while parsing row starting at position: XXX. Error: Bad character (ASCII 0) encountered.」

回避策

調べたところ、取込 csv ファイルに「ヌル文字 - Wikipedia」が混入しました。
さらに、こちらのEmbulk でASCII 0 encountered エラーの回避方法 に回避策を教えていただきました。
さて、BashOperator を使いましょう。

rm_null_char = BashOperator(
    task_id='rm_null_char',
    bash_command='./rm_null_char.sh',
    params={"src_file": "gs://src_file.csv", "fixed_file": "gs://fixed_file.csv"},
    dag=dag,
)
rm_null_char.sh
#!/bin/bash

gsutil cp {{ params.src_file }} - | tr -d '\000' | gsutil cp - {{ params.fixed_file }}

シェルスクリプトに書いてあるコマンドは bash_command に直に書くことも試しましたが、「\000」は Airflow に解析されて、「tr -d ''」となり、何も変更しないことになりました。

懸念点

まだ検証、勉強不足のところがありますが、
上記のコマンドはメモリ上で動いている気がします。
大量データの csv ファイルを処理する時に、他のタスクに影響が出そう、、

あと、ヌル文字混入したのところを解決するのが根本策ですが、
csv ファイルはお客さんが提供しているものなので、回避策までにしました。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2