CREATE TABLE

description

该语句用于创建 table。 语法:

  1. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
  2. (column_definition1[, column_definition2, ...]
  3. [, index_definition1[, index_definition2, ...]])
  4. [ENGINE = [olap|mysql|broker|hive|iceberg]]
  5. [key_desc]
  6. [COMMENT "table comment"];
  7. [partition_desc]
  8. [distribution_desc]
  9. [rollup_index]
  10. [PROPERTIES ("key"="value", ...)]
  11. [BROKER PROPERTIES ("key"="value", ...)]
  1. column_definition 语法: col_name col_type [agg_type] [NULL | NOT NULL] [DEFAULT "default_value"]

    说明: col_name:列名称 col_type:列类型

    1. BOOLEAN1字节)
    2. 范围:{0,1}
    3. TINYINT1字节)
    4. 范围:-2^7 + 1 ~ 2^7 - 1
    5. SMALLINT2字节)
    6. 范围:-2^15 + 1 ~ 2^15 - 1
    7. INT4字节)
    8. 范围:-2^31 + 1 ~ 2^31 - 1
    9. BIGINT8字节)
    10. 范围:-2^63 + 1 ~ 2^63 - 1
    11. LARGEINT16字节)
    12. 范围:-2^127 + 1 ~ 2^127 - 1
    13. FLOAT4字节)
    14. 支持科学计数法
    15. DOUBLE8字节)
    16. 支持科学计数法
    17. DECIMAL[(precision, scale)] (16字节)
    18. 保证精度的小数类型。默认是 DECIMAL(10, 0)
    19. precision: 1 ~ 27
    20. scale: 0 ~ 9
    21. 其中整数部分为 1 ~ 18
    22. 不支持科学计数法
    23. DATE3字节)
    24. 范围:0000-01-01 ~ 9999-12-31
    25. DATETIME8字节)
    26. 范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59
    27. CHAR[(length)]
    28. 定长字符串。长度范围:1 ~ 255。默认为1
    29. VARCHAR[(length)]
    30. 变长字符串。长度范围:1 ~ 65533
    31. HLL (1~16385个字节)
    32. hll列类型,不需要指定长度和默认值、长度根据数据的聚合
    33. 程度系统内控制,并且HLL列只能通过配套的hll_union_aggHll_cardinalityhll_hash进行查询或使用
    34. BITMAP
    35. bitmap列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到2^64 - 1

    agg_type:聚合类型,如果不指定,则该列为 key 列。否则,该列为 value 列

    1. * SUMMAXMINREPLACE
    2. * HLL_UNION(仅用于HLL列,为HLL独有的聚合方式)、
    3. * BITMAP_UNION(仅用于 BITMAP 列,为 BITMAP 独有的聚合方式)、
    4. * REPLACE_IF_NOT_NULL:这个聚合类型的含义是当且仅当新导入数据是非NULL值时会发生替换行为,如果新导入的数据是NULL,那么Doris仍然会保留原值。注意:如果用在建表时REPLACE_IF_NOT_NULL列指定了NOT NULL,那么Doris仍然会将其转化NULL,不会向用户报错。用户可以借助这个类型完成部分列导入的功能。**这里要注意的是字段默认值要给NULL,而不能是空字符串,如果是空字符串,会给你替换成空字符串**。
    5. * 该类型只对聚合模型(key_desctypeAGGREGATE KEY)有用,其它模型不需要指这个。

    是否允许为NULL: 默认允许为 NULL。NULL 值在导入数据中用 \N 来表示

    注意: BITMAP_UNION聚合类型列在导入时的原始数据类型必须是TINYINT,SMALLINT,INT,BIGINT。

  2. index_definition 语法: INDEX index_name (col_name[, col_name, ...]) [USING BITMAP] COMMENT 'xxxxxx' 说明: index_name:索引名称 col_name:列名 注意: 当前仅支持BITMAP索引, BITMAP索引仅支持应用于单列

  3. ENGINE 类型 默认为 olap。可选 mysql, broker, hive, iceberg

    1. 如果是 mysql,则需要在 properties 提供以下信息:
  1. PROPERTIES (
  2. "host" = "mysql_server_host",
  3. "port" = "mysql_server_port",
  4. "user" = "your_user_name",
  5. "password" = "your_password",
  6. "database" = "database_name",
  7. "table" = "table_name"
  8. )

注意: “table” 条目中的 “table_name” 是 mysql 中的真实表名。 而 CREATE TABLE 语句中的 table_name 是该 mysql 表在 Doris 中的名字,可以不同。

在 Doris 创建 mysql 表的目的是可以通过 Doris 访问 mysql 数据库。 而 Doris 本身并不维护、存储任何 mysql 数据。 2) 如果是 broker,表示表的访问需要通过指定的broker, 需要在 properties 提供以下信息:

  1. ```
  2. PROPERTIES (
  3. "broker_name" = "broker_name",
  4. "path" = "file_path1[,file_path2]",
  5. "column_separator" = "value_separator"
  6. "line_delimiter" = "value_delimiter"
  7. )
  8. ```
  9. 另外还需要提供Broker需要的Property信息,通过BROKER PROPERTIES来传递,例如HDFS需要传入
  10. ```
  11. BROKER PROPERTIES(
  12. "username" = "name",
  13. "password" = "password"
  14. )
  15. ```
  16. 这个根据不同的Broker类型,需要传入的内容也不相同

注意: “path” 中如果有多个文件,用逗号[,]分割。如果文件名中包含逗号,那么使用 %2c 来替代。如果文件名中包含 %,使用 %25 代替 现在文件内容格式支持CSV,支持GZ,BZ2,LZ4,LZO(LZOP) 压缩格式。

3) 如果是 hive,则需要在 properties 提供以下信息:

  1. PROPERTIES (
  2. "database" = "hive_db_name",
  3. "table" = "hive_table_name",
  4. "hive.metastore.uris" = "thrift://127.0.0.1:9083"
  5. )

其中 database 是 hive 表对应的库名字,table 是 hive 表的名字,hive.metastore.uris 是 hive metastore 服务地址。

4)如果是 iceberg,则需要在 properties 中提供以下信息:

  1. PROPERTIES (
  2. "iceberg.database" = "iceberg_db_name",
  3. "iceberg.table" = "iceberg_table_name",
  4. "iceberg.hive.metastore.uris" = "thrift://127.0.0.1:9083",
  5. "iceberg.catalog.type" = "HIVE_CATALOG"
  6. )

其中 database 是 Iceberg 对应的库名;
table 是 Iceberg 中对应的表名; hive.metastore.uris 是 hive metastore 服务地址;
catalog.type 默认为 HIVE_CATALOG。当前仅支持 HIVE_CATALOG,后续会支持更多 Iceberg catalog 类型。

  1. key_desc 语法: key_type(k1[,k2 ...]) 说明: 数据按照指定的key列进行排序,且根据不同的key_type具有不同特性。 key_type支持以下类型: AGGREGATE KEY:key列相同的记录,value列按照指定的聚合类型进行聚合, 适合报表、多维分析等业务场景。 UNIQUE KEY:key列相同的记录,value列按导入顺序进行覆盖, 适合按key列进行增删改查的点查询业务。 DUPLICATE KEY:key列相同的记录,同时存在于Doris中, 适合存储明细数据或者数据无聚合特性的业务场景。 默认为DUPLICATE KEY,key列为列定义中前36个字节, 如果前36个字节的列数小于3,将使用前三列。 注意: 除AGGREGATE KEY外,其他key_type在建表时,value列不需要指定聚合类型。

  2. partition_desc 目前支持 RANGE 和 LIST 两种分区方式。 5.1 RANGE 分区 RANGE partition描述有两种使用方式 1) LESS THAN 语法:

    1. PARTITION BY RANGE (k1, k2, ...)
    2. (
    3. PARTITION partition_name1 VALUES LESS THAN MAXVALUE|("value1", "value2", ...),
    4. PARTITION partition_name2 VALUES LESS THAN MAXVALUE|("value1", "value2", ...)
    5. ...
    6. )
    7. ```
    8. 说明:
    9. 使用指定的 key 列和指定的数值范围进行分区。
    10. 1) 分区名称仅支持字母开头,字母、数字和下划线组成
    11. 2) 目前仅支持以下类型的列作为 Range 分区列
    12. TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME
    13. 3) 分区为左闭右开区间,首个分区的左边界为做最小值
    14. 4) NULL 值只会存放在包含最小值的分区中。当包含最小值的分区被删除后,NULL 值将无法导入。
    15. 5) 可以指定一列或多列作为分区列。如果分区值缺省,则会默认填充最小值。
    16. 注意:
    17. 1) 分区一般用于时间维度的数据管理
    18. 2) 有数据回溯需求的,可以考虑首个分区为空分区,以便后续增加分区

    2)Fixed Range

    1. 语法:
    2. ```
    3. PARTITION BY RANGE (k1, k2, k3, ...)
    4. (
    5. PARTITION partition_name1 VALUES [("k1-lower1", "k2-lower1", "k3-lower1",...), ("k1-upper1", "k2-upper1", "k3-upper1", ...)),
    6. PARTITION partition_name2 VALUES [("k1-lower1-2", "k2-lower1-2", ...), ("k1-upper1-2", MAXVALUE, ))
    7. "k3-upper1-2", ...
    8. )
    9. ```
    10. 说明:
    11. 1Fixed RangeLESS THAN相对灵活些,左右区间完全由用户自己确定
    12. 2)其他与LESS THAN保持同步
    1. 5.2 LIST 分区 LIST partition分为单列分区和多列分区 1) 单列分区 语法:
    1. ```
    2. PARTITION BY LIST(k1)
    3. (
    4. PARTITION partition_name1 VALUES IN ("value1", "value2", ...),
    5. PARTITION partition_name2 VALUES IN ("value1", "value2", ...)
    6. ...
    7. )
    8. ```
    9. 说明:
    10. 使用指定的 key 列和制定的枚举值进行分区。
    11. 1) 分区名称仅支持字母开头,字母、数字和下划线组成
    12. 2) 目前仅支持以下类型的列作为 List 分区列
    13. BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME, CHAR, VARCHAR
    14. 3) 分区为枚举值集合,各个分区之间分区值不能重复
    15. 4) 不可导入 NULL
    16. 5) 分区值不能缺省,必须指定至少一个

    2) 多列分区

    1. 语法:
    2. ```
    3. PARTITION BY LIST(k1, k2)
    4. (
    5. PARTITION partition_name1 VALUES IN (("value1", "value2"), ("value1", "value2"), ...),
    6. PARTITION partition_name2 VALUES IN (("value1", "value2"), ("value1", "value2"), ...)
    7. ...
    8. )
    9. ```
    10. 说明:
    11. 1) 多列分区的分区是元组枚举值的集合
    12. 2) 每个元组值的个数必须与分区列个数相等
    13. 3) 其他与单列分区保持同步

    ```

  3. distribution_desc 1) Hash 分桶 语法: DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num] 说明: 使用指定的 key 列进行哈希分桶。默认分区数为10

    建议:建议使用Hash分桶方式

  4. PROPERTIES

    1. 如果 ENGINE 类型为 olap 可以在 properties 设置该表数据的初始存储介质、存储到期时间和副本数。
    1. PROPERTIES (
    2. "storage_medium" = "[SSD|HDD]",
    3. ["storage_cooldown_time" = "yyyy-MM-dd HH:mm:ss"],
    4. ["replication_num" = "3"]
    5. ["replication_allocation" = "xxx"]
    6. )
    1. storage_medium 用于指定该分区的初始存储介质,可选择 SSD HDD。默认初始存储介质可通过fe的配置文件 `fe.conf` 中指定 `default_storage_medium=xxx`,如果没有指定,则默认为 HDD
    2. 注意:当FE配置项 `enable_strict_storage_medium_check` `True` 时,若集群中没有设置对应的存储介质时,建表语句会报错 `Failed to find enough host in all backends with storage medium is SSD|HDD`.
    3. storage_cooldown_time 当设置存储介质为 SSD 时,指定该分区在 SSD 上的存储到期时间。
    4. 默认存放 30 天。
    5. 格式为:"yyyy-MM-dd HH:mm:ss"
    6. replication_num: 指定分区的副本数。默认为 3
    7. replication_allocation: 按照资源标签来指定副本分布。
    8. 当表为单分区表时,这些属性为表的属性。
    9. 当表为两级分区时,这些属性为附属于每一个分区。
    10. 如果希望不同分区有不同属性。可以通过 ADD PARTITION MODIFY PARTITION 进行操作
    1. 如果 Engine 类型为 olap, 可以指定某列使用 bloom filter 索引 bloom filter 索引仅适用于查询条件为 in 和 equal 的情况,该列的值越分散效果越好 目前只支持以下情况的列:除了 TINYINT FLOAT DOUBLE 类型以外的 key 列及聚合方法为 REPLACE 的 value 列
  1. PROPERTIES (
  2. "bloom_filter_columns"="k1,k2,k3"
  3. )
  1. 3) 如果希望使用 Colocate Join 特性,需要在 properties 中指定
  1. PROPERTIES (
  2. "colocate_with"="table1"
  3. )
  1. 4) 如果希望使用动态分区特性,需要在properties 中指定。注意:动态分区只支持 RANGE 分区
  1. PROPERTIES (
  2. "dynamic_partition.enable" = "true|false",
  3. "dynamic_partition.time_unit" = "HOUR|DAY|WEEK|MONTH",
  4. "dynamic_partition.start" = "${integer_value}",
  5. "dynamic_partition.end" = "${integer_value}",
  6. "dynamic_partition.prefix" = "${string_value}",
  7. "dynamic_partition.buckets" = "${integer_value}

dynamic_partition.enable: 用于指定表级别的动态分区功能是否开启。默认为 true。 dynamic_partition.time_unit: 用于指定动态添加分区的时间单位,可选择为HOUR(小时),DAY(天),WEEK(周),MONTH(月)。 注意:以小时为单位的分区列,数据类型不能为 DATE。 dynamic_partition.start: 用于指定向前删除多少个分区。值必须小于0。默认为 Integer.MIN_VALUE。 dynamic_partition.end: 用于指定提前创建的分区数量。值必须大于0。 dynamic_partition.prefix: 用于指定创建的分区名前缀,例如分区名前缀为p,则自动创建分区名为p20200108 dynamic_partition.buckets: 用于指定自动创建的分区分桶数量 dynamic_partition.create_history_partition: 用于创建历史分区功能是否开启。默认为 false。 dynamic_partition.history_partition_num: 当开启创建历史分区功能时,用于指定创建历史分区数量。 dynamic_partition.reserved_history_periods: 用于指定保留的历史分区的时间段。

5) 建表时可以批量创建多个 Rollup 语法:

  1. ROLLUP (rollup_name (column_name1, column_name2, ...)
  2. [FROM from_index_name]
  3. [PROPERTIES ("key"="value", ...)],...)

6) 如果希望使用 内存表 特性,需要在 properties 中指定

  1. PROPERTIES (
  2. "in_memory"="true"
  3. )
  1. in_memory 属性为 true 时,Doris会尽可能将该表的数据和索引CacheBE 内存中
  2. 7) 创建UNIQUE_KEYS表时,可以指定一个sequence列,当KEY列相同时,将按照sequence列进行REPLACE(较大值替换较小值,否则无法替换)
  1. PROPERTIES (
  2. "function_column.sequence_type" = 'Date',
  3. );
  1. sequence_type用来指定sequence列的类型,可以为整型和时间类型

example

  1. 创建一个 olap 表,使用 HASH 分桶,使用列存,相同key的记录进行聚合

    1. CREATE TABLE example_db.table_hash
    2. (
    3. k1 BOOLEAN,
    4. k2 TINYINT,
    5. k3 DECIMAL(10, 2) DEFAULT "10.5",
    6. v1 CHAR(10) REPLACE,
    7. v2 INT SUM
    8. )
    9. ENGINE=olap
    10. AGGREGATE KEY(k1, k2, k3)
    11. COMMENT "my first doris table"
    12. DISTRIBUTED BY HASH(k1) BUCKETS 32;
  2. 创建一个 olap 表,使用 Hash 分桶,使用列存,相同key的记录进行覆盖, 设置初始存储介质和冷却时间

    1. CREATE TABLE example_db.table_hash
    2. (
    3. k1 BIGINT,
    4. k2 LARGEINT,
    5. v1 VARCHAR(2048) REPLACE,
    6. v2 SMALLINT SUM DEFAULT "10"
    7. )
    8. ENGINE=olap
    9. AGGREGATE KEY(k1, k2)
    10. DISTRIBUTED BY HASH (k1, k2) BUCKETS 32
    11. PROPERTIES(
    12. "storage_medium" = "SSD",
    13. "storage_cooldown_time" = "2015-06-04 00:00:00"
    14. );
  3. 创建一个 olap 表,使用 Range 分区,使用Hash分桶,默认使用列存, 相同key的记录同时存在,设置初始存储介质和冷却时间

    1)LESS THAN

    1. CREATE TABLE example_db.table_range
    2. (
    3. k1 DATE,
    4. k2 INT,
    5. k3 SMALLINT,
    6. v1 VARCHAR(2048),
    7. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
    8. )
    9. ENGINE=olap
    10. DUPLICATE KEY(k1, k2, k3)
    11. PARTITION BY RANGE (k1)
    12. (
    13. PARTITION p1 VALUES LESS THAN ("2014-01-01"),
    14. PARTITION p2 VALUES LESS THAN ("2014-06-01"),
    15. PARTITION p3 VALUES LESS THAN ("2014-12-01")
    16. )
    17. DISTRIBUTED BY HASH(k2) BUCKETS 32
    18. PROPERTIES(
    19. "storage_medium" = "SSD", "storage_cooldown_time" = "2015-06-04 00:00:00"
    20. );

    说明: 这个语句会将数据划分成如下3个分区:

    1. ( { MIN }, {"2014-01-01"} )
    2. [ {"2014-01-01"}, {"2014-06-01"} )
    3. [ {"2014-06-01"}, {"2014-12-01"} )

    不在这些分区范围内的数据将视为非法数据被过滤

    1. Fixed Range
    1. CREATE TABLE table_range
    2. (
    3. k1 DATE,
    4. k2 INT,
    5. k3 SMALLINT,
    6. v1 VARCHAR(2048),
    7. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
    8. )
    9. ENGINE=olap
    10. DUPLICATE KEY(k1, k2, k3)
    11. PARTITION BY RANGE (k1, k2, k3)
    12. (
    13. PARTITION p1 VALUES [("2014-01-01", "10", "200"), ("2014-01-01", "20", "300")),
    14. PARTITION p2 VALUES [("2014-06-01", "100", "200"), ("2014-07-01", "100", "300"))
    15. )
    16. DISTRIBUTED BY HASH(k2) BUCKETS 32
    17. PROPERTIES(
    18. "storage_medium" = "SSD"
    19. );
  4. 创建一个 olap 表,使用 List 分区,使用Hash分桶,默认使用列存, 相同key的记录同时存在,设置初始存储介质和冷却时间

    1)单列分区

    1. CREATE TABLE example_db.table_list
    2. (
    3. k1 INT,
    4. k2 VARCHAR(128),
    5. k3 SMALLINT,
    6. v1 VARCHAR(2048),
    7. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
    8. )
    9. ENGINE=olap
    10. DUPLICATE KEY(k1, k2, k3)
    11. PARTITION BY LIST (k1)
    12. (
    13. PARTITION p1 VALUES IN ("1", "2", "3"),
    14. PARTITION p2 VALUES IN ("4", "5", "6"),
    15. PARTITION p3 VALUES IN ("7", "8", "9")
    16. )
    17. DISTRIBUTED BY HASH(k2) BUCKETS 32
    18. PROPERTIES(
    19. "storage_medium" = "SSD", "storage_cooldown_time" = "2022-06-04 00:00:00"
    20. );

    说明: 这个语句会将数据划分成如下3个分区:

    1. ("1", "2", "3")
    2. ("4", "5", "6")
    3. ("7", "8", "9")

    不在这些分区枚举值内的数据将视为非法数据被过滤

    1. 多列分区
    1. CREATE TABLE example_db.table_list
    2. (
    3. k1 INT,
    4. k2 VARCHAR(128),
    5. k3 SMALLINT,
    6. v1 VARCHAR(2048),
    7. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
    8. )
    9. ENGINE=olap
    10. DUPLICATE KEY(k1, k2, k3)
    11. PARTITION BY LIST (k1, k2)
    12. (
    13. PARTITION p1 VALUES IN (("1","beijing"), ("1", "shanghai")),
    14. PARTITION p2 VALUES IN (("2","beijing"), ("2", "shanghai")),
    15. PARTITION p3 VALUES IN (("3","beijing"), ("3", "shanghai"))
    16. )
    17. DISTRIBUTED BY HASH(k2) BUCKETS 32
    18. PROPERTIES(
    19. "storage_medium" = "SSD", "storage_cooldown_time" = "2022-06-04 00:00:00"
    20. );

    说明: 这个语句会将数据划分成如下3个分区:

    1. (("1","beijing"), ("1", "shanghai"))
    2. (("2","beijing"), ("2", "shanghai"))
    3. (("3","beijing"), ("3", "shanghai"))

    不在这些分区枚举值内的数据将视为非法数据被过滤

  5. 创建一个 mysql 表

    5.1 直接通过外表信息创建mysql表

  1. CREATE EXTERNAL TABLE example_db.table_mysql
  2. (
  3. k1 DATE,
  4. k2 INT,
  5. k3 SMALLINT,
  6. k4 VARCHAR(2048),
  7. k5 DATETIME
  8. )
  9. ENGINE=mysql
  10. PROPERTIES
  11. (
  12. "host" = "127.0.0.1",
  13. "port" = "8239",
  14. "user" = "mysql_user",
  15. "password" = "mysql_passwd",
  16. "database" = "mysql_db_test",
  17. "table" = "mysql_table_test"
  18. )

5.2 通过External Catalog Resource创建mysql表

  1. CREATE EXTERNAL RESOURCE "mysql_resource"
  2. PROPERTIES
  3. (
  4. "type" = "odbc_catalog",
  5. "user" = "mysql_user",
  6. "password" = "mysql_passwd",
  7. "host" = "127.0.0.1",
  8. "port" = "8239"
  9. );
  1. CREATE EXTERNAL TABLE example_db.table_mysql
  2. (
  3. k1 DATE,
  4. k2 INT,
  5. k3 SMALLINT,
  6. k4 VARCHAR(2048),
  7. k5 DATETIME
  8. )
  9. ENGINE=mysql
  10. PROPERTIES
  11. (
  12. "odbc_catalog_resource" = "mysql_resource",
  13. "database" = "mysql_db_test",
  14. "table" = "mysql_table_test"
  15. )
  1. 创建一个数据文件存储在HDFS上的 broker 外部表, 数据使用 “|” 分割,”\n” 换行
  1. CREATE EXTERNAL TABLE example_db.table_broker (
  2. k1 DATE,
  3. k2 INT,
  4. k3 SMALLINT,
  5. k4 VARCHAR(2048),
  6. k5 DATETIME
  7. )
  8. ENGINE=broker
  9. PROPERTIES (
  10. "broker_name" = "hdfs",
  11. "path" = "hdfs://hdfs_host:hdfs_port/data1,hdfs://hdfs_host:hdfs_port/data2,hdfs://hdfs_host:hdfs_port/data3%2c4",
  12. "column_separator" = "|",
  13. "line_delimiter" = "\n"
  14. )
  15. BROKER PROPERTIES (
  16. "username" = "hdfs_user",
  17. "password" = "hdfs_password"
  18. )
  1. 创建一张含有HLL列的表
  1. CREATE TABLE example_db.example_table
  2. (
  3. k1 TINYINT,
  4. k2 DECIMAL(10, 2) DEFAULT "10.5",
  5. v1 HLL HLL_UNION,
  6. v2 HLL HLL_UNION
  7. )
  8. ENGINE=olap
  9. AGGREGATE KEY(k1, k2)
  10. DISTRIBUTED BY HASH(k1) BUCKETS 32;
  1. 创建一张含有BITMAP_UNION聚合类型的表(v1和v2列的原始数据类型必须是TINYINT,SMALLINT,INT)
  1. CREATE TABLE example_db.example_table
  2. (
  3. k1 TINYINT,
  4. k2 DECIMAL(10, 2) DEFAULT "10.5",
  5. v1 BITMAP BITMAP_UNION,
  6. v2 BITMAP BITMAP_UNION
  7. )
  8. ENGINE=olap
  9. AGGREGATE KEY(k1, k2)
  10. DISTRIBUTED BY HASH(k1) BUCKETS 32;
  1. 创建两张支持Colocate Join的表t1 和t2
  1. CREATE TABLE `t1` (
  2. `id` int(11) COMMENT "",
  3. `value` varchar(8) COMMENT ""
  4. ) ENGINE=OLAP
  5. DUPLICATE KEY(`id`)
  6. DISTRIBUTED BY HASH(`id`) BUCKETS 10
  7. PROPERTIES (
  8. "colocate_with" = "t1"
  9. );
  10. CREATE TABLE `t2` (
  11. `id` int(11) COMMENT "",
  12. `value` varchar(8) COMMENT ""
  13. ) ENGINE=OLAP
  14. DUPLICATE KEY(`id`)
  15. DISTRIBUTED BY HASH(`id`) BUCKETS 10
  16. PROPERTIES (
  17. "colocate_with" = "t1"
  18. );
  1. 创建一个数据文件存储在BOS上的 broker 外部表
  1. CREATE EXTERNAL TABLE example_db.table_broker (
  2. k1 DATE
  3. )
  4. ENGINE=broker
  5. PROPERTIES (
  6. "broker_name" = "bos",
  7. "path" = "bos://my_bucket/input/file",
  8. )
  9. BROKER PROPERTIES (
  10. "bos_endpoint" = "http://bj.bcebos.com",
  11. "bos_accesskey" = "xxxxxxxxxxxxxxxxxxxxxxxxxx",
  12. "bos_secret_accesskey"="yyyyyyyyyyyyyyyyyyyy"
  13. )
  1. 创建一个带有bitmap 索引的表
  1. CREATE TABLE example_db.table_hash
  2. (
  3. k1 TINYINT,
  4. k2 DECIMAL(10, 2) DEFAULT "10.5",
  5. v1 CHAR(10) REPLACE,
  6. v2 INT SUM,
  7. INDEX k1_idx (k1) USING BITMAP COMMENT 'xxxxxx'
  8. )
  9. ENGINE=olap
  10. AGGREGATE KEY(k1, k2)
  11. COMMENT "my first doris table"
  12. DISTRIBUTED BY HASH(k1) BUCKETS 32;
  1. 创建一个动态分区表(需要在FE配置中开启动态分区功能),该表每天提前创建3天的分区,并删除3天前的分区。例如今天为2020-01-08,则会创建分区名为p20200108, p20200109, p20200110, p20200111的分区. 分区范围分别为:
  1. [types: [DATE]; keys: [2020-01-08]; types: [DATE]; keys: [2020-01-09]; )
  2. [types: [DATE]; keys: [2020-01-09]; types: [DATE]; keys: [2020-01-10]; )
  3. [types: [DATE]; keys: [2020-01-10]; types: [DATE]; keys: [2020-01-11]; )
  4. [types: [DATE]; keys: [2020-01-11]; types: [DATE]; keys: [2020-01-12]; )
  1. CREATE TABLE example_db.dynamic_partition
  2. (
  3. k1 DATE,
  4. k2 INT,
  5. k3 SMALLINT,
  6. v1 VARCHAR(2048),
  7. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
  8. )
  9. ENGINE=olap
  10. DUPLICATE KEY(k1, k2, k3)
  11. PARTITION BY RANGE (k1) ()
  12. DISTRIBUTED BY HASH(k2) BUCKETS 32
  13. PROPERTIES(
  14. "storage_medium" = "SSD",
  15. "dynamic_partition.time_unit" = "DAY",
  16. "dynamic_partition.start" = "-3",
  17. "dynamic_partition.end" = "3",
  18. "dynamic_partition.prefix" = "p",
  19. "dynamic_partition.buckets" = "32"
  20. );
  1. 创建一个带有rollup索引的表
  1. CREATE TABLE example_db.rollup_index_table
  2. (
  3. event_day DATE,
  4. siteid INT DEFAULT '10',
  5. citycode SMALLINT,
  6. username VARCHAR(32) DEFAULT '',
  7. pv BIGINT SUM DEFAULT '0'
  8. )
  9. AGGREGATE KEY(event_day, siteid, citycode, username)
  10. DISTRIBUTED BY HASH(siteid) BUCKETS 10
  11. rollup (
  12. r1(event_day,siteid),
  13. r2(event_day,citycode),
  14. r3(event_day)
  15. )
  16. PROPERTIES("replication_num" = "3");
  1. 创建一个内存表
  1. CREATE TABLE example_db.table_hash
  2. (
  3. k1 TINYINT,
  4. k2 DECIMAL(10, 2) DEFAULT "10.5",
  5. v1 CHAR(10) REPLACE,
  6. v2 INT SUM,
  7. INDEX k1_idx (k1) USING BITMAP COMMENT 'xxxxxx'
  8. )
  9. ENGINE=olap
  10. AGGREGATE KEY(k1, k2)
  11. COMMENT "my first doris table"
  12. DISTRIBUTED BY HASH(k1) BUCKETS 32
  13. PROPERTIES ("in_memory"="true");
  1. 创建一个hive外部表
  1. CREATE TABLE example_db.table_hive
  2. (
  3. k1 TINYINT,
  4. k2 VARCHAR(50),
  5. v INT
  6. )
  7. ENGINE=hive
  8. PROPERTIES
  9. (
  10. "database" = "hive_db_name",
  11. "table" = "hive_table_name",
  12. "hive.metastore.uris" = "thrift://127.0.0.1:9083"
  13. );
  1. 通过 replication_allocation 指定表的副本分布
  1. CREATE TABLE example_db.table_hash
  2. (
  3. k1 TINYINT,
  4. k2 DECIMAL(10, 2) DEFAULT "10.5"
  5. )
  6. DISTRIBUTED BY HASH(k1) BUCKETS 32
  7. PROPERTIES (
  8. "replication_allocation"="tag.location.group_a:1, tag.location.group_b:2"
  9. );
  10. CREATE TABLE example_db.dynamic_partition
  11. (
  12. k1 DATE,
  13. k2 INT,
  14. k3 SMALLINT,
  15. v1 VARCHAR(2048),
  16. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
  17. )
  18. PARTITION BY RANGE (k1) ()
  19. DISTRIBUTED BY HASH(k2) BUCKETS 32
  20. PROPERTIES(
  21. "dynamic_partition.time_unit" = "DAY",
  22. "dynamic_partition.start" = "-3",
  23. "dynamic_partition.end" = "3",
  24. "dynamic_partition.prefix" = "p",
  25. "dynamic_partition.buckets" = "32",
  26. "dynamic_partition."replication_allocation" = "tag.location.group_a:3"
  27. );
  1. 创建一个 Iceberg 外表
  1. CREATE TABLE example_db.t_iceberg
  2. ENGINE=ICEBERG
  3. PROPERTIES (
  4. "iceberg.database" = "iceberg_db",
  5. "iceberg.table" = "iceberg_table",
  6. "iceberg.hive.metastore.uris" = "thrift://127.0.0.1:9083",
  7. "iceberg.catalog.type" = "HIVE_CATALOG"
  8. );

keyword

  1. CREATE,TABLE