1

作为背景,我一直在研究将 Google BigQuery 用作 BI 类型工具的后端平台。我想指出我还没有使用过 BigQuery,所以我的问题是关于我在文档中看到的内容。

高级计划是——也许——将 Big Query 作为构建在 Tableau 之上的仪表板的“实时”源。

显然,加载数据的最佳方式是使用 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..

  }

哪种方法更有意义?

谢谢!

4

1 回答 1

1

问题 a) 很简单:您可以添加行和列,但不能更改现有行。将数据添加到现有行的嵌套结构将符合更改所述行的条件 - 因此不可能。

问题 b) 是一个设计问题。您已经掌握了基础知识,但在不了解您的查询模式的情况下,很难优化。BigQuery 足够灵活,可以双向工作,但优化需要更多数据。

一个好的经验法则是存储很便宜:您可以保留规范化和非规范化数据 - 并根据查询进行选择。使用的最佳模式将以这种方式快速浮出水面!

于 2013-11-03T23:51:14.903 回答