2017-10-26 13 views
2

ハイブテーブルをBigQueryに移行するためのデータパイプラインを設計しようとしています。 Hiveは、前提クラスター上のHadoopで実行されています。各テーブルsource_hive_table {ハイブテーブルをGoogle BigQueryに移行する

  • INSERT上書きテーブルtarget_avro_hive_tableSELECT * FROM source_hive_table;
  • 移動グーグルへの結果のアブロファイル用

    :これはそれだけでシェルスクリプトで、私の現在の設計は、実際に、それは非常に簡単ですdistcp

  • を使用してクラウドストレージは、最初BQテーブルを作成します。bq load --source_format=AVRO your_dataset.something something.avro
  • はこれだけ書かれたテーブルから選択し、手動で取り扱い、BigQueryの自体から任意の鋳造の問題を扱いますY鋳造

}

は、あなたはそれが理にかなっていると思いますか? Sparkを使って、もっと良い方法がありますか? キャストの処理方法が不安です。BigQueryテーブルを2回作成することは避けてください。

+0

他のDBからBigQueryに移行するには、エクスポートする(CSVなど)、GCSにアップロードしてインポートするのが最も簡単で簡単な方法です。完了しました。 –

答えて

1

はい、移行ロジックは意味があります。

Avro(Hive)データを生成する最初の "Hiveクエリ"に特定のタイプのCASTを直接行うことを個人的に好みます。例えば、「decimal」型はHiveのAvro型にマップされています。「型」「バイト」「論理型」「小数」「精度」:10「スケール」:2

そして、BQはlogicalTypeの代わりにプライマリタイプ(ここでは "bytes")を取るだけです。 これは、ハイブで直接キャストする方が簡単であることを示しています(ここでは「ダブル」にします)。 日付ハイブタイプにも同じ問題が発生します。

+0

「最初のハイブクエリにキャスト」を詳しく説明できますか? 私の問題は、たとえば、AvroタイムスタンプとBQタイムスタンプの間のマッピングです。 – Edge7

+0

以下は、実行するHiveクエリの例です。 'のCREATE TABLEはAVRO AS として格納 がtst_bidwh.xxx_source datedirから キャスト(doubleとしてitemordervalue)、 hit_time_gmt、 キャスト(文字列としてdatedir)、 post_cookies を選択sluangsay.xxxx:あなたはここ2、キャストを見ることができます= '2017-03-24'; ' – Sourygna

関連する問題