背景としては、Google BigQuery を BI 系ツールのバックエンド プラットフォームとして利用することを研究してきました。私はまだ BigQuery を使用していないことを指摘しておきたいので、私の質問はドキュメントで見たことに関するものです。
大まかな計画は、おそらく、Tableau 上に構築されたダッシュボードの「ライブ」ソースとして Big Query を使用することでした。
どうやらデータをロードする最良の方法は、JSON (ネストをサポートする) を使用した非正規化構造を使用することです。
JSON が次のようになっていることがわかります。
{
FirstName: 'John',
LastName: 'Doe',
Orders: {
orderNo: 12345,
orderDate: '2013-01-01'
orderlines: {
lineNo: 1,
qty: 1,
price: 12,
productId: 1234
productName: 'Learning System',
productSubsystem: 'SUB'
}
},
LeadScores: {
{
scoreName: 'Learning Tech',
scoreValue: 123,
scoreDate: '2013-01-01'
},
{
scoreName: 'ScoreB',
scoreValue: 15,
scoreDate: '2013-01-01'
}
},
Activities {
** email opens, email clicks, page view, etc. (all here) **
{
activityType: 'email',
activityAction: 'open',
activityDescription 'message-1234'
}
}
}
今私の質問:
「内部」コレクションにレコードを追加できますか (毎日より多くのアクティビティを追加したい場合など)? それとも、別のエンティティである必要がありますか? (穴のように JSON は単一のエンティティです)
この構造は理にかなっていますか、それとも「3」程度のエンティティ (アクティビティ、注文、人口統計、スコア) を持ち、JOIN を使用する方がよいでしょうか? BigQuery は JOIN を使用しないことを好むと読みました。
潜在的な構造は
スコアの場合:
{
date: '2013-01-01',
scoreName: 'Score A',
scoreValue: '1234',
customerId: '123456'
}
アクティビティの場合:
{
date: '2013-01-01',
activityType: 'email',
activityAction: 'open',
extra: '',
customerId: '123456'
}
人口統計の場合
{
customerId: '123456',
firstName: 'A',
lastName: 'B', etc..
}
どちらのアプローチがより理にかなっていますか?
ありがとうございました!