CREATE TABLE

    1. column_definition 语法:

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

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

      agg_type:聚合类型,如果不指定,则该列为 key 列。否则,该列为 value 列 * SUM、MAX、MIN、REPLACE * HLL_UNION(仅用于HLL列,为HLL独有的聚合方式)、 * BITMAP_UNION(仅用于 BITMAP 列,为 BITMAP 独有的聚合方式)、 * REPLACE_IF_NOT_NULL:这个聚合类型的含义是当且仅当新导入数据是非NULL值时会发生替换行为,如果新导入的数据是NULL,那么Doris仍然会保留原值。注意:如果用在建表时REPLACE_IF_NOT_NULL列指定了NOT NULL,那么Doris仍然会将其转化NULL,不会向用户报错。用户可以借助这个类型完成部分列导入的功能。 * 该类型只对聚合模型(key_desc的type为AGGREGATE KEY)有用,其它模型不需要指这个。

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

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

    2. ENGINE 类型 默认为 olap。可选 mysql, broker

      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. )
    1. 注意:
    2. "table" 条目中的 "table_name" mysql 中的真实表名。
    3. CREATE TABLE 语句中的 table_name 是该 mysql 表在 Palo 中的名字,可以不同。
    4. Palo 创建 mysql 表的目的是可以通过 Palo 访问 mysql 数据库。
    5. Palo 本身并不维护、存储任何 mysql 数据。
    6. 1) 如果是 broker,表示表的访问需要通过指定的broker, 需要在 properties 提供以下信息:
    1. PROPERTIES (
    2. "broker_name" = "broker_name",
    3. "path" = "file_path1[,file_path2]",
    4. "column_separator" = "value_separator"
    5. "line_delimiter" = "value_delimiter"
    6. )
    7. ```
    8. 另外还需要提供Broker需要的Property信息,通过BROKER PROPERTIES来传递,例如HDFS需要传入
    9. ```
    10. BROKER PROPERTIES(
    11. "username" = "name",
    12. "password" = "password"
    13. )
    14. ```
    15. 这个根据不同的Broker类型,需要传入的内容也不相同

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

    1. 1. key\_desc 语法: `key_type(k1[,k2 ...])` 说明: 数据按照指定的key列进行排序,且根据不同的key\_type具有不同特性。 key\_type支持一下类型: AGGREGATE KEY:key列相同的记录,value列按照指定的聚合类型进行聚合, 适合报表、多维分析等业务场景。 UNIQUE KEY:key列相同的记录,value列按导入顺序进行覆盖, 适合按key列进行增删改查的点查询业务。 DUPLICATE KEY:key列相同的记录,同时存在于Palo中, 适合存储明细数据或者数据无聚合特性的业务场景。 默认为DUPLICATE KEYkey列为列定义中前36个字节, 如果前36个字节的列数小于3,将使用前三列。 注意: AGGREGATE KEY外,其他key\_type在建表时,value列不需要指定聚合类型。
    2. 2. partition\_desc partition描述有两种使用方式
    3. 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. 说明: 使用指定的 key 列和指定的数值范围进行分区。 1) 分区名称仅支持字母开头,字母、数字和下划线组成 2) 目前仅支持以下类型的列作为 Range 分区列,且只能指定一个分区列 TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME 3) 分区为左闭右开区间,首个分区的左边界为做最小值 4) NULL 值只会存放在包含最小值的分区中。当包含最小值的分区被删除后,NULL 值将无法导入。 5) 可以指定一列或多列作为分区列。如果分区值缺省,则会默认填充最小值。
    9. 注意: 1) 分区一般用于时间维度的数据管理 2) 有数据回溯需求的,可以考虑首个分区为空分区,以便后续增加分区
    10. 2)Fixed Range 语法: `PARTITION BY RANGE (k1, k2, k3, ...) ( PARTITION partition_name1 VALUES [("k1-lower1", "k2-lower1", "k3-lower1",...), ("k1-upper1", "k2-upper1", "k3-upper1", ...)), PARTITION partition_name2 VALUES [("k1-lower1-2", "k2-lower1-2", ...), ("k1-upper1-2", MAXVALUE, )) "k3-upper1-2", ... )` 说明: 1)Fixed Range比LESS THAN相对灵活些,左右区间完全由用户自己确定 2)其他与LESS THAN保持同步
    1. distribution_desc 1) Hash 分桶 语法: DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num] 说明: 使用指定的 key 列进行哈希分桶。默认分区数为10

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

    2. 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. )
      1. storage_medium 用于指定该分区的初始存储介质,可选择 SSD HDD。默认初始存储介质可通过fe的配置文件 `fe.conf` 中指定 `default_storage_medium=xxx`,如果没有指定,则默认为 HDD
      2. storage_cooldown_time 当设置存储介质为 SSD 时,指定该分区在 SSD 上的存储到期时间。
      3. 默认存放 30 天。
      4. 格式为:"yyyy-MM-dd HH:mm:ss"
      5. replication_num: 指定分区的副本数。默认为 3
      6. 当表为单分区表时,这些属性为表的属性。
      7. 当表为两级分区时,这些属性为附属于每一个分区。
      8. 如果希望不同分区有不同属性。可以通过 ADD PARTITION MODIFY PARTITION 进行操作
    1. PROPERTIES (
    2. "bloom_filter_columns"="k1,k2,k3"
    3. )
    1. 3) 如果希望使用 Colocate Join 特性,需要在 properties 中指定
    1. 4) 如果希望使用动态分区特性,需要在properties 中指定
    1. PROPERTIES (
    2. "dynamic_partition.enable" = "true|false",
    3. "dynamic_partition.time_unit" = "DAY|WEEK|MONTH",
    4. "dynamic_partition.start" = "${integer_value}",
    5. "dynamic_partitoin.end" = "${integer_value}",
    6. "dynamic_partition.prefix" = "${string_value}",
    7. "dynamic_partition.buckets" = "${integer_value}
    1. dynamic_partition.enable: 用于指定表级别的动态分区功能是否开启。默认为 true
    2. dynamic_partition.time_unit: 用于指定动态添加分区的时间单位,可选择为DAY(天),WEEK(周),MONTH(月)
    3. dynamic_partition.start: 用于指定向前删除多少个分区。值必须小于0。默认为 Integer.MIN_VALUE
    4. dynamic_partition.prefix: 用于指定创建的分区名前缀,例如分区名前缀为p,则自动创建分区名为p20200108
    5. 5) 建表时可以批量创建多个 Rollup
    6. 语法:
    7. ```
    8. ROLLUP (rollup_name (column_name1, column_name2, ...)
    9. [FROM from_index_name]
    10. [PROPERTIES ("key"="value", ...)],...)
    11. ```
    12. 6) 如果希望使用 内存表 特性,需要在 properties 中指定
    1. PROPERTIES (
    2. "in_memory"="true"
    3. )
    1. in_memory 属性为 true 时,Doris会尽可能将该表的数据和索引CacheBE 内存中

    example

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

      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. )
      8. ENGINE=olap
      9. AGGREGATE KEY(k1, k2)
      10. COMMENT "my first doris table"
      11. DISTRIBUTED BY HASH(k1) BUCKETS 32
      12. PROPERTIES ("storage_type"="column");
    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. UNIQUE KEY(k1, k2)
      10. DISTRIBUTED BY HASH (k1, k2) BUCKETS 32
      11. PROPERTIES(
      12. "storage_type"="column"
      13. "storage_medium" = "SSD",
      14. "storage_cooldown_time" = "2015-06-04 00:00:00"
      15. );
    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. 创建一个 mysql 表

    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
    11. PROPERTIES ("storage_type"="column");
    1. CREATE TABLE example_db.example_table
    2. (
    3. k1 TINYINT,
    4. k2 DECIMAL(10, 2) DEFAULT "10.5",
    5. v2 BITMAP BITMAP_UNION
    6. )
    7. ENGINE=olap
    8. AGGREGATE KEY(k1, k2)
    9. DISTRIBUTED BY HASH(k1) BUCKETS 32
    10. PROPERTIES ("storage_type"="column");
    1. 创建两张支持Colocat 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
    13. PROPERTIES ("storage_type"="column");
    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. (
    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",
    20. "dynamic_partition.time_unit" = "DAY",
    21. "dynamic_partition.start" = "-3",
    22. "dynamic_partition.end" = "3",
    23. "dynamic_partition.prefix" = "p",
    24. "dynamic_partition.buckets" = "32"
    25. );
    1. Create a table with rollup index
    1. CREATE TABLE example_db.rolup_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");
    17. 13. 创建一个内存表
    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");