You need to enable JavaScript to run this app.
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
外表
HDFS 外表
复制全文
HDFS 外表

ByteHouse 研发的 CnchHDFS 引擎深度集成 Apache Hadoop 生态系统,支持通过 ByteHouse 直接管理 HDFS 上的数据。本文将介绍如何在 ByteHouse 云数仓版中使用 HDFS 外表。

背景信息

ByteHouse 借助 CnchHDFS 引擎实现与 HDFS 的对接,无需将数据迁移至 ByteHouse 内部,即可对 HDFS 上的原始数据执行查询、写入等操作。ByteHouse 提供了两种使用方式:CnchHDFS 表引擎(持久化外表)和 CnchHDFS 表函数,您可根据业务场景灵活选择。
CnchHDFS 表引擎和 CnchHDFS 表函数两种方式对比如下:

方式

适用场景

CnchHDFS 表引擎

  • 支持重复查询,无需重复指定连接、格式等参数,适合需要多次访问外部数据的场景。
  • 适用于小批量和大批量数据导入。

CnchHDFS 表函数

  • 一次性查询,无需预先建表,语法相对灵活,但每次查询都需完整指定参数,更适合一次性数据加载任务。
  • 适用于小批量和大批量数据的一次性导入或查询。

费用说明

外部表的功能旨在提供除 ByteHouse 内部表以外的其他数据的处理能力。通过一条简单的 DDL 语句,即可在 ByteHouse 上创建一张外部表,建立 ByteHouse 表与外部数据源的关联。

  • 外部表在 ByteHouse 侧只会产生计算费用,遵循 ByteHouse 计算资源计费规则。
  • 使用外部表功能时,外部表的数据不会复制一份存在 ByteHouse 上并产生存储费用。存储费用请关注外部数据源存储侧计费规则。
  • 使用 ByteHouse 外部表访问外部数据源时,外部数据源可能会产生计算、访问、数据传输等费用,具体以外部数据源计费方式为准,请关注相应产品的说明。

前提条件

在执行 HDFS 外表的查询、写入或管理操作前,请确保您已获得该表对应的读写权限。

使用 CnchHDFS 表引擎

创建表

语法

CREATE TABLE [db_name.]table_name (
    column1 type1, column2 type2, ...
) ENGINE=CnchHDFS('hdfs_path', 'format', '[compression]') 
[SETTINGS key=value];

参数

是否必填

配置说明

[db_name.]table_name

  • db_name:指定表所在的数据库名称。如果您在创建表前,执行了 USE db_name,可不填写数据库名称。填写示例:demo_db.target_table_name
  • table_name:自定义外表名称。
  • column1 type1:定义表结构,表结构需与 HDFS 源表保持一致,包含列名和列类型。填写示例:id UInt32, name String

ENGINE

表引擎指定为 CnchHDFS。

hdfs_path

指定 HDFS 外表对应的文件存储路径,需具体到某份文件或使用通配符选择多份文件。
填写示例:

  • 指定单份文件:hdfs://ip:port/prefix/file.csv
  • 使用通配符选择多份文件:hdfs://ip:port/prefix/test/file*.csv

format

指定 HDFS 外表的文件格式,请根据您的文件格式填写。当前 CnchHDFS 支持的文件格式请参见相关参考:CnchHDFS 表支持的文件格式

[compression]

可选配置。当前支持 gzip/zlib/brotli/xz/zstd/lz4/bzip2/snappy 压缩格式,也支持设置为 none。不指定时,系统将从文件后缀中推测。

[SETTINGS]

配置 settings 参数,常用 settings 参数如下:

  • index_granularity:索引粒度,即数据块的大小,默认 8192,单位:行。

示例

  • 创建单文件表

    CREATE TABLE hdfs_engine_table (
        name String, value UInt32
    ) ENGINE=CnchHDFS('hdfs://ip:port/prefix/file.csv', 'CSV', 'none') 
    SETTINGS index_granularity=8192
    
  • 使用通配符创建多文件表

    CREATE TABLE hdfs_engine_table_glob_uri (
        name String, value UInt32
    ) ENGINE=CnchHDFS('hdfs://ip:port/prefix/test/file*.csv', 'CSV', 'none') 
    SETTINGS index_granularity=8192
    

写入数据

您可通过 INSERT INTO 语句向 HDFS 外表写入数据,用法与普通表的写入操作一致。
示例如下:

INSERT INTO hdfs_engine_table 
VALUES ('one', 1), ('two', 2), ('three', 3);

查询数据

您可通过 SELECT 语句查询 HDFS 外表中的数据,用法与普通表的查询操作一致。ByteHouse 也支持通过 _path_file 列进行剪枝查询。示例如下:

  • 查询数据

    SELECT * FROM hdfs_engine_table;
    
  • 使用 _file 列进行剪枝查询

    SELECT * FROM hdfs_engine_table_glob_uri WHERE _file = 'fileSimple.csv';
    

修改配置

默认情况下,外表的 resources_assign_type **** 值为 server_push,在该模式下,数据文件会被发往 Worker 进行查询。如果您想在 Server 本地查询,可以修改 resources_assign_typeserver_local

ALTER TABLE hdfs_engine_table MODIFY SETTING resources_assign_type='server_local'

使用 CnchHDFS 表函数

ByteHouse 也支持了 CnchHDFS 表函数,无需预创建 HDFS 外表,可直接向 HDFS 表写入数据,快速查询 HDFS 表数据。

写入数据

直接向 HDFS 表写入数据,该操作默认覆盖原文件。
语法

INSERT INTO FUNCTION
    CnchHDFS(
        'hdfs_path',
        'column1 type1, column2 type2, ...',
        '[format]',
        '[compression]'
    ) VALUES (value1_1, value1_2, ...),    
    (value2_1, value2_2, ...),  
    (...);

参数

是否必填

配置说明

FUNCTION

表函数指定为 CnchHDFS。

hdfs_path

指定 HDFS 外表对应的文件存储路径,需具体到某份文件。填写示例:hdfs://ip:port/prefix/file.csv

column1 type1, column2 type2, ...

定义表结构,表结构需与 HDFS 源表保持一致,包含列名和列类型。填写示例:id UInt32, name String

[format]

可选配置。指定 HDFS 外表的文件格式,请根据您的文件格式填写。当前 CnchHDFS 支持的文件格式请参见相关参考:CnchHDFS 表支持的文件格式

[compression]

可选配置。当前支持 gzip/zstd/lz4/snappy/bzip2/xz/brotli 压缩格式,也支持设置为 none。不指定时,系统将从文件后缀中推测。

VALUES

指定需写入的数据。

示例

INSERT INTO FUNCTION
    CnchHDFS(
        'hdfs://ip:port/prefix/test/file.csv',
        'city String, name String',
        'CSV',
        'none'
    ) VALUES ('one', '1'),
    ('two', '2'),
    ('three', '3');

分区级写入数据

分区级写入数据的语法与普通写入数据一致,但需在 hdfs_path 路径中包含 '{_partition_id}' 字段,其他参数请参考上文参数说明。
示例如下:

INSERT INTO FUNCTION
    CnchHDFS(
        'hdfs://ip:port/prefix/test/{_partition_id}_file.csv',
        'city String, name String',
        'CSV',
        'none'
    )
PARTITION BY
    city VALUES ('one', '1'),
    ('two', '2'),
    ('three', '3');

查询数据

使用 CnchHDFS 函数直接查询 HDFS 表。
语法

SELECT *
FROM
    CnchHDFS(
        'hdfs_path',
        'column1 type1, column2 type2, ...',
        '[format]',
        '[compression]'
    )
[WHERE where_clause];

参数

是否必填

配置说明

CnchHDFS

表函数指定为 CnchHDFS。

hdfs_path

指定 HDFS 外表对应的文件存储路径,需具体到某份文件。填写示例:hdfs://ip:port/prefix/file.csv

column1 type1

指定 HDFS 外表的表结构,需与源表保持一致,包括列名和列类型。填写示例:id UInt32, name String

[format]

可选配置。指定 HDFS 外表的文件格式,请根据您的文件格式填写。当前 CnchHDFS 支持的文件格式请参见相关参考:CnchHDFS 表支持的文件格式

[compression]

可选配置。当前支持 gzip/zstd/lz4/snappy/bzip2/xz/brotli 压缩格式,也支持设置为 none。不指定时,系统将从文件后缀中推测。

[WHERE]

指定筛选条件。ByteHouse HDFS 外表支持通过 _path_file 进行剪枝查询。

示例

  • 查询单份文件

    SELECT *
    FROM
        CnchHDFS(
            'hdfs://ip:port/prefix/test/file.csv',
            'city String, name String',
            'CSV',
            'none'
        );
    
  • 使用通配符查询多份文件,并进行剪枝查询

    SELECT *
    FROM
        CnchHDFS(
            'hdfs://ip:port/prefix/test/file*.csv',
            'city String, name String',
            'CSV',
            'none'
        )
    WHERE
        _path LIKE '%test%';
    

相关参考:CnchHDFS 表支持的文件格式

文件格式

Read

Write

TabSeparated

TabSeparatedRaw

TabSeparatedWithNames

TabSeparatedWithNamesAndTypes

CSV

CSVWithNames

CustomSeparated

JSON

JSONCompact

JSONEachRow

JSONObjectEachRow

TSKV

Pretty

PrettyCompact

PrettyCompactNoEscapes

PrettyCompactMonoBlock

PrettySpace

PrettySpaceNoEscapes

Protobuf

Parquet

RowBinary

RowBinaryWithNamesAndTypes

Native

XML

CapnProto

最近更新时间:2026.01.08 15:44:03
这个页面对您有帮助吗?
有用
有用
无用
无用