2017-01-10 1 views
1

私は日付でパーティション化したいデータをいくつか持っており、内部的に定義されたクライアントIDでパーティション化しています。日付パーティションの創造的な使用

現在、このデータを保存するには、日付ごとの表を使用します。それは正常に機能しますが、個々のクライアントIDを照会するのは遅く、コストがかかります。

クライアントIDごとにテーブルを作成し、それらのテーブル内で日付パーティションを使用することを検討しました。ここでの唯一の問題は、1日に何千もの負荷ジョブが発生し、クライアントIDでデータを事前に分割する必要があることです。テーブルあたりの日付のアプローチと -Stick(例えばlog_20170110) 我々は、パーティションの日付として使用-Createダミー日付列、およびにその日付を設定 - :ここで

は私が思いついた可能性のあるソリューションです。 01-01(例:クライアントID 1235の場合、_PARTITIONTIMEを1235-01-01に設定)

このようにすれば、日々データを読み込むことができます。これにより、日付ごとのパーティション分割が可能になり、クライアントIDごとに分割する日付分割機能あなたはこのアプローチに何か間違っていますか? BigQueryを使用すると、200年または5000年のデータを保存できますか?

PS:日付をunixtimeの後にプッシュするスキームを使用することもできます。たとえば、2000に年を追加するか、最後の2桁を月と日にプッシュします。たとえば、1235 => 2012-03- 05。

答えて

0

BigQueryでは、200年または5000年のデータを保存できますか?

はい

、00001-01-01と9999-12-31

だから、正式にこれはオプションです(そしてところであなたは既に/計画持っているどのように多くのクライアントに依存します)話す

間の任意の日付

https://stackoverflow.com/a/41091896/5221944

その間に同じ考え方についての詳細を参照してください、私はBigQueryのはすぐに任意のフィールドで分割する能力を持っていることを期待します。おそらくNEXT 2017 - ちょっと推測:o)

0

提案されたアイデアは、(パーティションの数が増えるにつれて)クエリのパフォーマンス上の問題を引き起こす可能性があります。一般的に言えば、日付パーティションは、数千のパーティションでうまく機能します。

クライアントIDは一般に互いに関係がなく、ハッシュには理想的です。より豊かなパーティショニングの仕方をサポートするために取り組む一方で、client_idsをN個のバケット(〜100?)にハッシュし、N個のパーティション化されたテーブルを持つことができます。こうすることで、指定した日付のN個のテーブルを照会することができます。たとえば、100個のテーブルを使用すると、すべてのclient_idsで1個のテーブルを使用する場合の1%になります。少数のパーティションもスキャンして、それに応じてパフォーマンスを向上させる必要があります。残念ながら、このアプローチでは、クライアントIDを適切な表に置くことの懸念には対応していません(これはユーザーが管理する必要があります)。

関連する問題