Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ORC

输入 输出 别名

说明

Apache ORC 是一种在 Hadoop 生态中广泛使用的列式存储格式。

数据类型匹配

下表比较了支持的 ORC 数据类型,以及它们在 INSERTSELECT 查询中对应的 ClickHouse 数据类型

ORC 数据类型 (INSERT) ClickHouse 数据类型 ORC 数据类型 (SELECT)
Boolean Bool Boolean
Tinyint Int8/UInt8/Enum8 Tinyint
Smallint Int16/UInt16/Enum16 Smallint
Int Int32/UInt32 Int
Bigint Int64/UInt64 Bigint
Float Float32 Float
Double Float64 Double
Decimal Decimal Decimal
Date Date32 Date
Timestamp DateTime64 Timestamp
String, Varchar, Binary String String
Char FixedString String
List Array List
Struct Tuple Struct
Map Map Map
Int IPv4 Int
Binary IPv6 Binary
Binary Int128/UInt128/Int256/UInt256 Binary
Binary Decimal256 Binary
Union Variant Union
  • 不支持其他类型。
  • ORC Union 列会被读取为由 union 的分支类型构成的 Variant,而 Variant 列会被写入为由其分支类型构成的 ORC Union。请注意,Variant 会对其分支类型排序,因此分支顺序可能与 ORC 文件不同。不支持包含重复分支类型的 union (例如 uniontype<int,int>) 。
  • Array 可以嵌套,也可以接受 Nullable 类型的值作为参数。TupleMap 类型同样可以嵌套。
  • ClickHouse 表列的数据类型不必与对应的 ORC 数据字段一致。插入数据时,ClickHouse 会根据上表解释数据类型,然后将数据转换为 ClickHouse 表列设置的数据类型。

使用示例

插入数据

使用名为 football.orc、包含以下数据的 ORC 文件:

    ┌───────date─┬─season─┬─home_team─────────────┬─away_team───────────┬─home_team_goals─┬─away_team_goals─┐
 1. │ 2022-04-30 │   2021 │ Sutton United         │ Bradford City       │               1 │               4 │
 2. │ 2022-04-30 │   2021 │ Swindon Town          │ Barrow              │               2 │               1 │
 3. │ 2022-04-30 │   2021 │ Tranmere Rovers       │ Oldham Athletic     │               2 │               0 │
 4. │ 2022-05-02 │   2021 │ Port Vale             │ Newport County      │               1 │               2 │
 5. │ 2022-05-02 │   2021 │ Salford City          │ Mansfield Town      │               2 │               2 │
 6. │ 2022-05-07 │   2021 │ Barrow                │ Northampton Town    │               1 │               3 │
 7. │ 2022-05-07 │   2021 │ Bradford City         │ Carlisle United     │               2 │               0 │
 8. │ 2022-05-07 │   2021 │ Bristol Rovers        │ Scunthorpe United   │               7 │               0 │
 9. │ 2022-05-07 │   2021 │ Exeter City           │ Port Vale           │               0 │               1 │
10. │ 2022-05-07 │   2021 │ Harrogate Town A.F.C. │ Sutton United       │               0 │               2 │
11. │ 2022-05-07 │   2021 │ Hartlepool United     │ Colchester United   │               0 │               2 │
12. │ 2022-05-07 │   2021 │ Leyton Orient         │ Tranmere Rovers     │               0 │               1 │
13. │ 2022-05-07 │   2021 │ Mansfield Town        │ Forest Green Rovers │               2 │               2 │
14. │ 2022-05-07 │   2021 │ Newport County        │ Rochdale            │               0 │               2 │
15. │ 2022-05-07 │   2021 │ Oldham Athletic       │ Crawley Town        │               3 │               3 │
16. │ 2022-05-07 │   2021 │ Stevenage Borough     │ Salford City        │               4 │               2 │
17. │ 2022-05-07 │   2021 │ Walsall               │ Swindon Town        │               0 │               3 │
    └────────────┴────────┴───────────────────────┴─────────────────────┴─────────────────┴─────────────────┘

插入数据:

INSERT INTO football FROM INFILE 'football.orc' FORMAT ORC;

读取数据

使用 ORC 格式读取数据:

SELECT *
FROM football
INTO OUTFILE 'football.orc'
FORMAT ORC

格式设置

设置 描述 默认值
output_format_orc_string_as_string 对 String 列使用 ORC String 类型,而非 Binary。 true
output_format_orc_compression_method 输出 ORC 格式使用的压缩方法。默认值 zstd
input_format_orc_case_insensitive_column_matching 匹配 ORC 列与 ClickHouse 列时忽略大小写。 false
input_format_orc_allow_missing_columns 读取 ORC 数据时允许列缺失。 true
input_format_orc_skip_columns_with_unsupported_types_in_schema_inference 对 ORC 格式执行 schema inference 时,允许跳过类型不受支持的列。 false

要与 Hadoop 交换数据,可以使用 HDFS 表引擎

Navigation