如何在clickhouse中创建“表中表”?

Posted

技术标签:

【中文标题】如何在clickhouse中创建“表中表”?【英文标题】:How to create 'table in table' in clickhouse? 【发布时间】:2020-06-12 07:57:41 【问题描述】:

例如

在 clickhouse 中,我想创建一个类似以下结构的表。

create table (
time     DateTime,
visits   array(unit) 
)
Engine=memory

the unit struct 
 a          string, 
 btime      int64,  
 c          string, 
 e          string

如何创建表?

【问题讨论】:

【参考方案1】:

需要使用Nested data structure:

CREATE TABLE visits (
  time     DateTime,
  visits   Nested
  (
    a          String, 
    btime      Int64,  
    c          String, 
    e          String    
  )
) ENGINE = Memory;

/* insert test data */
INSERT INTO visits
VALUES 
  (now(), ['a1', 'a2'], [1, 2], ['c1', 'c2'], ['e1', 'e2']),
  (now(), ['a11', 'a12'], [11, 12], ['c11', 'c12'], ['e11', 'e12']);

SELECT *
FROM visits;
/* results
┌────────────────time─┬─visits.a──────┬─visits.btime─┬─visits.c──────┬─visits.e──────┐
│ 2020-06-12 08:14:07 │ ['a1','a2']   │ [1,2]        │ ['c1','c2']   │ ['e1','e2']   │
│ 2020-06-12 08:14:07 │ ['a11','a12'] │ [11,12]      │ ['c11','c12'] │ ['e11','e12'] │
└─────────────────────┴───────────────┴──────────────┴───────────────┴───────────────┘
*/

另外,请看文章Nested Data Structures in ClickHouse。


【讨论】:

知道了,但是如果我想从mongo批量导入这样的数据结构,转换起来会很复杂。 有两种方法可以创建重复 JSON 模式的 DB 模式(如答案中所述)或将 JSON 存储为字符串并使用 Functions for Working with JSON。此外,这两种方式都可以结合使用。

以上是关于如何在clickhouse中创建“表中表”?的主要内容,如果未能解决你的问题,请参考以下文章

在 clickhouse 中创建表时如何将自定义默认值添加到 Nullable 类型?

如何在 ember-cli-mirage 中创建对象?

如何使用 jboss-cli 在 WildFly 17 中创建 JMS 队列

如何在此文件夹中创建一个全新的 Angular 组件?为啥我使用 Angular CLI 获得此错误消息?

text 在CLI中创建MySQL用户

使用 CLI 在 Gitlab 中创建存储库