2017-09-30 7 views
0

私は104M行のmysqlテーブルを持っています。 streaming insertsの方法を使用すると、およそ3時間かかり、費用は5ドルです。BigQueryにmysql結果を得る最速の方法

mysqlテーブルをクエリまたはコピーしてBQに入れる最も速い方法は何ですか?たとえば、GDB上のcsvファイルに直接mysqlデータベース(GCPにはない)をストリーミングし、BQからcsvファイルをロードする方法はありますか?我々は、loading csv files from GCS into BQがかなり速いことに気づいた。

外部のmysqlテーブル(または外部データベース)からBQへのデータをできるだけ速く取得する方法はありますか?


更新は:我々は(我々はすでにやる)増分フィードを実行して、我々のデータサイズを小さくしようとしていないことに注意してください。この質問は、外部データベースからBQに100M行のデータを得る最速の方法(15GBと言う)をどうすべきかを尋ねるだけです。

+0

私はこれまでやったことはありませんが、テーブルをCSV形式でエクスポートしてGCSにアップロードするのが最速の方法だと思います。また、Cloud Dataflowを使用してカスタムシンクを作成してMySQLと会話することもできますが、それはおそらくそれほど価値がありません。 –

+0

@GrahamPolleyどのストリーミング・ストリーミング・インサートよりも速く/どうしてこのようなベンチマークが可能ですか? – David542

+0

いいえ、ストリーミングは速くなりますが、ストリーミング・インサートは覚えておいてください。また、ストリーミングで指数関数的なバックオフとリトライを行う必要があります。 –

答えて

3

ブログ投稿のシリーズがありますが、WePayがこれを達成するための彼らの方法を示していた。

MySQLのGCSへのオペレータは、MySQL テーブルに対してSELECTクエリを実行します。 SELECTは、最後の のウォーターマークより大きい(または等しい)すべてのデータをプルします。最高透かしは テーブルのプライマリキー(テーブルが追加専用の場合)または変更タイムスタンプ (テーブルが更新を受け取る場合)のいずれかです。繰り返しになりますが、SELECTステートメント も少し時間がかかります(最後にクエリを実行した場合)。

エアフローでは、15分ごとにBigQueryをMySQLデータベースと同期させることができます。


補遺(質問がBigQueryのに行を挿入する最速の方法を知りたいと):

  • ストリーミングインサートは、BigQueryのにデータを取得する最も簡単な方法ですが、限界があります毎秒100,000行100M行は少なくともこの速度で100秒かかるでしょう。

  • bq load通常、GCS(json、csv、avro)のファイルは、データを一括して無料でインポートする最も簡単な方法です。

  • (json、csv、avro)ファイルをGCSに入れて、従来のインポートクエリデータをGCSから直接実行する代わりに使用してください。これはbq load(ロードスケジューラを待つ必要はありません)より速くなければならず、SELECT *の結果を新しいBQネイティブテーブルに出力できます。これのコストは、クエリのコスト(スキャンされたバイト数)になります。

+0

こんにちはフェリペ、この回答に感謝します。すでに完全リフレッシュとインクリメンタルリフレッシュを行っていますので、上記のことはわれわれが探しているものではありません。基本的に、mysqlデータベースに1M行がある場合、そのデータをBQにインポートするにはどのような方法が最も速いのですか? (クエリのサイズを縮小する方法ではなく、与えられたものとしてください) – David542

+0

オハイオ州、私はいくつかの考えを追加しました。 –

+0

>ストリーミングの挿入は、データをBigQueryに入れる最も速い方法です。 @FelipeHoffaストリーミングはGCSからロードするよりも速いと言っていますか? – Maximilian

関連する問題