You need to enable JavaScript to run this app.
文档中心
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
下载 pdf
ByteHouse云数仓版
常见问题
复制全文
下载 pdf
常见问题

产品能力通用咨询

ByteHouse 适用于哪些场景?

ByteHouse 广泛应用于实时推荐系统、广告投放、A/B 测试等数据分析场景。

ByteHouse 云数仓版本和企业版性能差异?

  • 企业版:存储和计算一体化,数据locality+热存,查询直发节点,网络少几个链路的跳转。
  • 云数仓版:正在做一些优化,会把索引和数据预加载,同时减少一些链路开销,也可以摸高大几千qps-上万,现在在进展中,理论上性能是可以随着计算组规格扩缩容的。

ByteHouse 支持哪些地域?

当前 ByteHouse 在火山引擎支持的地域请参考 地域及可用区,您可以根据业务情况选择合适的地域和可用区来部署 ByteHouse。
如您对于其他地域和可用区的服务有需求,请提交工单联系我们。

ByteHouse 支持哪些数据源进行导入?

当前 ByteHouse 云数仓版支持如下数据源的导入

类型

数据源

备注

离线导入

文件传输

文件小于 200 MB 时适用

离线导入

火山引擎对象存储 TOS

适用于大文件离线导入

离线导入

阿里云对象存储 OSS

适用于跨云大文件离线导入

离线导入

AWS 对象存储 S3

适用于跨云大文件离线导入

实时导入

Apache Kafka

适用于实时流数据导入

ByteHouse 支持哪些数据格式?

数据源

支持的数据格式

备注

文件上传

支持 .csv, .json, .xls, .avro, .parquet, .csv.gz 等格式

上传文件需小于 200 MB

火山 TOS, AWS S3, 阿里云 OSS 等

支持 .csv, .json, .xls, .avro, .parquet, .csv.gz 等格式

最多选中 100 个文件批量上传

Apache Kafka

支持 JSON 和 Parquet 格式

ByteHouse 能够支持哪些 BI 工具的对接?

当前 ByteHouse 支持 DataWind 、 Power BI 、Superset、 Tableau BI 等工具的对接,更多 BI 工具的集成还在开发中。

ByteHouse 支持的 SQL 语义有哪些?

当前 ByteHouse 支持 ANSI SQL 2011 和 Clickhouse SQL 两种语义,用户可以在控制台或客户端指定。

ByteHouse 是否兼容 ClickHouse 语法?

当前 ByteHouse 兼容 ClickHouse 23.3 语法。

当有很多小查询时(占用资源少、查询快),推荐将它们指定到多个不同的小的计算组上查询,还是一个大的计算组上查询?

推荐指定到一个大的计算组查询效率更高。

如何查看 ByteHouse 引擎版本?

您可以在 ByteHouse 控制台的租户管理>基本信息页面查看您当前的引擎版本。
Image

ByteHouse 云数仓版的默认时区是什么?

不同地域的默认时区不同,您可通过执行以下 SQL 语句查看您所在地域的默认时区。

SELECT timezone();

示例:
Image

ByteHouse 的计算组有几个节点?

计算组的节点数与您购买的规格直接相关,且当前在控制台暂未直接展示,具体规则如下:

  1. 节点数规则:XS/S/M/L 规格默认 1 个节点,XL 及以上规格为多个节点;
  2. 核心关联说明:
    • 计算组的 Pod 数等于节点数;
    • 一个计算组默认包含 1 个 Worker 进程,该 Worker 会管理所有 Pod,即 Worker 下的 Pod 数量 = 节点数。

连接ByteHouse-网络联通

如何打通ByteHouse与客户VPC网络的联通性?

可参考设置网络信息文档,通过绑定客户的私有网络VPC后生成一个私网域名,客户可以从绑定的VPC的任何资源内通过私网域名进行连接ByteHouse CDW。

在绑定私有网络VPC的时候,为什么VPC选择框里少了一些VPC选项或者为空?

因为在做私有网络VPC打通时,客户的VPC网段和ByteHouse自身服务的VPC网段不能有冲突,所以ByteHouse服务会将有冲突的网段进行过滤,以下是不同的Region会进行过滤的网段:

若此时没有可选的VPC,解决办法为创建一个与以上网段不冲突的VPC,比如:192.168.128.0/24

通过专线打通客户私有网络后,无法访问ByteHouse CDW?

  • 常见问题:
    • 「客户IDC/专有网络环境」内无法解析「CDW私网连接域名」,导致连接不通。
    • JDBC-URL使用「私网连接域名」连接时遇到unknown host;IP和端口可telnet通,但是配在jdbc url中无法连接等。
  • 解决方案:
    建议将「私网IP-CDW私网连接域名」的映射,加在「私有网络环境」client端的所在容器环境/宿主机/DNS服务器中,保证在客户端能够解析CDW私网连接域名到已打通的「租户连接的私网IP」。获取「租户连接的私网IP」可通过:
    Image
    step1 获取「私网域名」:进入ByteHouse云数仓版控制台-基本信息-网络信息,找到私网域名。
    step2 获取「私网连接IP」:进入绑定CDW的VPC中任一ECS实例中,执行nslookup/dig/ping 私网域名,即可获取。

connection reset

  1. 首先确定下协议端口是否正确:
    • tcp协议对应的端口为:19000
    • http协议对应端口为:8123
    • MySQL协议对应端口为:3306
  2. 如果是使用http协议的话,需要使用https协议,如: https://tenant-{TENANT_ID}-{REGION}-public.bytehouse.volces.com:8123
  3. 如果使用tcp协议的话,需要使用ssl,如 JDBC: jdbc:bytehouse://tenant-{TENANT_ID}-{REGION}-public.bytehouse.volces.com:19000/${your_database}?secure=true ,需要确保已配置 **secure=true **。

创建 ByteHouse 的时候,子网应该如何配置?

  • 问题背景:
    创建 ByteHouse 的时候,子网应该如何配置?现在已经有了 3 个子网,但是都不能选。
  • 问题原因:
    ByteHouse 创建私有连接时,会对应一个 Load Balancer(负载均衡器),并且在您指定的 VPC 里生成一张网卡(会占用 1 个 VPC 内网 IP),该网卡会附加到 Load Balancer 上,作为 ByteHouse 的访问入口。
    子网无法选择的核心原因是:子网网段与 ByteHouse 内置的 bytehouse-vpc 网段存在冲突。若网段重叠,会导致 VPC 内路由规则紊乱,无法建立正常连接,因此系统会屏蔽冲突的子网,使其不可选。
  • 解决方案:
    新建一个与 bytehouse-vpc 网段无冲突的子网。

连接ByteHouse-认证与鉴权

API_KEY 只能生成两个吗?能支持更多吗?

目前API_KEY 只能支持两个,每个子账号都有独立的两个API_KEY, 如果需要更多API_KEY的需求,可以通过不同的子账号来进行生成多个API_KEY。

调用API时,支持通过ak/sk获取sts临时凭证,然后利用ak和sts临时凭证连接bytehouse数据库吗?

不可以,ByteHouse cdw 不支持此种方式,ByteHouse cdw 当前仅支持支持用api token的方式连接ByteHouse数据库,
具体的规范操作请参见调用方式

AccountAdmin / SystemAdmin 角色授权范围与授权操作?

AccountAdmin / SystemAdmin 为特殊的admin角色,角色权限范围映射到火山IAM里的策略里等同于:

  • AccountAdmin = 火山 AdministratorAccess 策略
  • SystemAdmin = 火山 ByteHouseFullAccess 策略

如需给用户配置以上角色,可在火山引擎的访问控制(IAM)里给用户配上对应的权限策略,或把用户加到有对应策略的用户组里,等3~5分钟即可。

为什么在ByteHouse页面上无法授予Account Admin / System Admin权限?

system admin 是映射的 火山的bytehouse full access 策略,如果火山子账号配置了该策略,ByteHouse会自动映射继承该权限。在ByteHouse内部无法给子账号授予Account Admin / System Admin。在火山IAM里给用户配上对应的策略 / 把用户加到有对应策略的用户组里,等3~5分钟即可生效。

如何延长 API Key 的有效期?

登录 ByteHouse 云数仓版控制台,单击顶部租户管理,单击连接信息,在 API Key 模块,单击 API Key 所在行的编辑按钮,在弹出的编辑窗口中,修改 API Key 有效期。您可将其延长至指定时间或将其调整为永久有效:

  • 延长至指定时间:保留时间到期失效,单击过期时间下的时间编辑框,选择目标有效期,单击提交
  • 调整为永久有效:保留时间选择为永久有效,单击提交

Image

连接ByteHouse-JDBC

如何使用JDBC连接ByteHouse云数仓,用户名和密码分别是什么?

如使用JDBC连接bytehouse,可以参考 ByteHouse JDBC Driver文档,其中username统一都为bytehouse,密码为API_KEY,API_KEY可以在租户管理的连接信息中进行生成获取。

是否支持1.7 java编译的JDBC?

不支持,当前仅支持1.8java 编译的jdbc。

使用JDBC连接ByteHouse后,如何自定义query id?

使用JDBC连接ByteHouse后,您可以使用 ((ByteHouseConnection) connection).setQueryId(queryId)来自定义query id。以下是自定义 query id 的示例:

try {
 statement.execute(String.format("CREATE DATABASE IF NOT EXISTS %s", databaseName));
 statement.execute(String.format("CREATE TABLE IF NOT EXISTS %s (id INT) "
 + "ENGINE=CnchMergeTree() order by tuple()", tableName));
 for (String queryId: queryIds) {
 // While constructing the prepared statement object, JDBC already sends the query to server. So we
 // need to set the queryId before constructing the prepared statement object.
 // While sending query, JDBC driver will use the queryId set in the connection object, or random UUID number if not set.
 // After sending the query, JDBC driver will reset the queryId.
 ((ByteHouseConnection) connection).setQueryId(queryId);
 ByteHousePreparedInsertStatement pstmt = (ByteHousePreparedInsertStatement) statement.
 getConnection().prepareStatement(String.format("INSERT INTO %s VALUES(?)", tableName));
 pstmt.setObject(1, 1);
 pstmt.addBatch();
 pstmt.executeBatch();
 }
} finally {
 statement.execute(String.format("DROP DATABASE IF EXISTS %s", databaseName));
}

MySQL JDBC连接ByteHouse时,支持指定计算组(vm)吗?

目前在连接方式上无法配置 vw ,只能在SQL命令后面加 SETTINGS virtual_warehouse = 'vw-名字',或者先在全局设置set virtual_warehouse = 'vw-名字', 再执行SQL命令。

连接ByteHouse-Python

使用Python连接ByteHouse后,如何在Python代码中输出query_id ?

from bytehouse_driver import Client
import uuid
def BH_driver_client(host, port, api_key):
    client = Client.from_url('bytehouse://bytehouse:{}@{}:{}/?secure=true&connect_timeout=20&send_timeout=3600&receive_timeout=3600'.format(api_key, host, port))
    return client
if __name__ == '__main__':
    PORT = 19000
    HOST_AWS_AP = 'gateway.aws-{REGION}.bytehouse.cloud'
    API_KEY = "xxxxxxxxxx"
    client = BH_driver_client(HOST_AWS_AP, PORT, API_KEY)
    query_id = str(uuid.uuid4())
    print("query_id:"+query_id)
    result_set = client.execute("select version()", query_id=query_id)
    for result in result_set:
        print(result)

使用Python连接ByteHouse集群报错:no virtual warehouse was selected

  • 报错信息:no virtual warehouse was selected
  • 可能原因:执行命令时无可用的计算组。
  • 解决方案:您需提供命令执行的计算组信息,参考以下两种方案,选择其中合适的方案进行处理。

    说明

    使用以下两种解决方案时,均需保障设置的计算组是启动状态, 或者是暂停状态但是计算组设置了允许自启动,否则即使设置完成计算组SQL执行依旧会报错。

    • 解决方案1:在租户管理里面去配置一个默认计算组。

    • 解决方案2:在执行SQL时候指定计算组,如:SELECT column FROM database.table WHERE your_condition SETTINGS virtual_warehouse='vw-uuid'

连接ByteHouse-ByteHouse client

使用bytehouse cdw client 连接报错:dial tcp http://xxxxx:19000: i/o timeout

以原命令为以下示例命令为例:
bytehouse-cli --host http://bytehouse-{REGION}.volces.com --port 19000 --secure --token xxxxxx -q "INSERT INTO xxx.xxxx (xxxx) format CSVWithNames" < 'xxxx.csv'
解决方案为:建议加上参数——连接超时配置 。连接超时时间默认是3s, i/o timeout会受网络的影响,或者server端一些变化会导致偶发断开连接等等,建议将连接超时时间稍微调大一点。
以配置连接超时时间为10s为例-ct 10
bytehouse-cli --host http://bytehouse-{REGION}.volces.com --port 19000 --secure --token xxxxxx -ct 10 -q "INSERT INTO xxx.xxxx (xxxx) format CSVWithNames" < 'xxxx.csv'

计算组

无法查看计算组监控详情

  • 报错信息:Code : "AccessDenied" CodeN : 100013 Message : "User is not authorized to perform: Volc_Observe:GetMetricsData on resource:
  • 可能原因:用户权限不足。
  • 解决方案:用户查看计算组监控详情,需拥有 CloudMonitorReadOnlyAccess 权限,详细操作请参考为 IAM 用户添加权限

SQL-SET设置

当前支持哪些通过SET修改配置的方式?

  • session级别 :先执行set max_execution_time = 60,再执行SQL。
  • SQL 级别 :如 sql setting max_execution_time = 60

如何设置长时间运行SQL的超时配置?

在执行长时间运行SQL语句之前,使用set语句设置一下session级别的超时参数,例如:
set receive_timeout = 10800000, send_timeout = 10800000;

SQL-语法

UPDATE / DELETE语法使用要点

Unique表和非Unique表的update/delete 语法不同。

说明

判断是否为Unique表的方法是建表语句中有无配置 :UNIQUE KEY 。

  • Unique表语法

    UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
    DELETE FROM <表名> [WHERE 子句]
    
  • 非Unique表语法

    ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] [IN PARTITION partition_expr] WHERE filter_expr
    ALTER TABLE [db.]table DELETE [IN PARTITION partition_expr] WHERE filter_expr
    

left join时,右表不存在数据时如何补值?

left join 中左表存在但右表不存在的数据,默认情况下以null补充右表不存在的数据,您也可以可以通过settings join_use_nulls=0配置以空值来补充补充,示例如下。

SELECT
    a.id,
    a.name,
    b.address
FROM
    users AS a
LEFT JOIN
    user_details AS b
ON
    a.id = b.user_id settings join_use_nulls=0;

如何删除分区?

  • unique 表

    删除分区命令

    功能说明

    alter drop partition语句(推荐)

    删除分区,支持所有表,底层直接删除目录,性能好,建议优先使用。

    • 通用示例

      ALTER TABLE $database_name.$table_name DROP PARTITION '2024-10-09',DROP PARTITION '2024-10-08';
      
    • 根据条件删除分区

      ALTER TABLE $database_name.$table_name DROP PARTITION where `toDate(toStartOfDay(date1))` >'2024-10-06';
      

      说明

      DROP PARTITION where表达式必须包含完整的PARTION BY表达式,如果是复杂表达式,需要使用反引号(``)强制区分。toDate(toStartOfDay(date1)) 是PARTITION BY 后的项使用方式可参考建表语句。

    delete 语句(不推荐)

    删除数据为同步删除,底层是先查再删除,是追加文件的方式删除,消耗性能,并且只支持unique表。
    示例如下。

    DELETE FROM $database_name.$table_name WHERE date1 = '2024-10-10';
    
  • 非unique表

    删除分区命令

    功能说明

    alter drop partition语句(推荐)

    删除分区,支持所有表,底层直接删除目录,性能好,建议优先使用。

    • 通用示例

      ALTER TABLE $database_name.$table_name DROP PARTITION '2024-10-09',DROP PARTITION '2024-10-08';
      
    • 根据条件删除分区

      ALTER TABLE $database_name.$table_name DROP PARTITION where `toDate(toStartOfDay(date1))` >'2024-10-06';
      

      说明

      toDate(toStartOfDay(date1)) 是PARTITION BY 后的项使用方式可参考建表语句。

    alter delete(不推荐)

    删除数据为异步删除,不支持unique表。
    示例如下。

    ALTER TABLE $database_name.$table_name DELETE WHERE k1 = 'a';
    

DML、DDL语句中那些是同步操作、哪些是异步操作?

  • DML

    操作

    执行方式

    INSERT

    同步

    ALTER TABLE ... DELETE WHERE

    异步

    ALTER TABLE ... UPDATE WHERE

    异步

    OPTIMIZE TABLE

    异步,mutaitons_sync = 1 会尽量同步

    TRUNCATE TABLE

    同步

    delete where

    同步

  • DDL

    DDL 语句类型

    示例

    执行方式

    CREATE

    CREATE DATABASE,CREATE TABLE

    同步

    DROP

    DROP DATABASE,DROP TABLE

    同步

    ALTER

    ALTER TABLE ... ADD COLUMN(同步)

    同步

    RENAME

    RENAME TABLE

    同步

    TRUNCATE

    TRUNCATE TABLE

    同步

    ATTACH / DETACH

    ATTACH TABLE,DETACH TABLE

    同步

    SHOW / DESCRIBE

    SHOW TABLES,DESCRIBE TABLE

    同步

    EXISTS

    EXISTS TABLE,EXISTS DATABASE

    同步

    SYSTEM

    SYSTEM DROP PARTITION(异步),RELOAD TABLES(同步)

    混合

使用 DROP TABLE 误删表,是否可以恢复?

如果您使用 DROP TABLE 误删了表,可通过 UNDROP TABLE 恢复。该方式仅限于恢复 DROP TABLE 的删除操作,且有效期有限,当前最多支持恢复两天内删除的表,可用于临时误操作止损。强烈推荐您使用备份恢复功能,详情请参见备份恢复
使用示例如下:

# 删除表,但发现误删该表
DROP TABLE db_name.table_name;

# 使用 UNDROP TABLE 恢复表
UNDROP TABLW db_name.table_name;

# 查询数据,校验是否恢复成功
SELECT count() FROM db_name.table_name;

SQL-报错

SQL 执行报错:DB::Exception: Memory limit (for query) exceeded: would use xxx GiB

此类(for query)满的报错,是单个 Query 的内存限制超限导致的,可以检查并确认下 SQL 是否有优化空间,例如:

  • 减少 join 的数据量,且 join 时大表放左、小表放右边。
  • 去掉 group by 动作。

相关配置参数为 max_memory_usage,如果实际 SQL 运行的内存很大,可以提交工单或联系 ByteHouse 官方同学调大该值。

SQL执行报错:Exception: Memory limit (total) exceeded: would use xxx GiB (attempt to allocate chunk of xxx bytes), maximum: xxxxx GiB

此类(total)满的报错,是节点整体的内存超限,可以检查一下,计算组的内存监控,确认是否符合预期(默认这个限制是计算组内存的90%)。
解决方案:

  • 减少整体SQL的并发。
  • 对稳定性要求高的SQL,可以单独开一个计算组。
  • 对当前这个计算组进行扩容。

SQL执行报错:Too many simultaneous queries

问题定位

  • 通过云监控查看综合查询并发数、 默认查询并发数、 插入查询并发数这三类并发数,定位报错原因。

Image

解决办法

  • 写入操作过多导致的报错
    1. 优化写入模式:采用攒批插入方式,降低写入并发量,核心思路是增大单条 INSERT 语句中 values 的条数,减少语句执行频次。
    2. 推荐批量插入大小:建议至少以 1000 行作为一批次插入,理想批次大小为 10,000–100,000 行。更少次数、更大批量的插入能减少写入的数据分片(parts)数量,降低合并负载,同时减少整体系统资源消耗。
    3. 进阶优化参考:若需针对性优化写入逻辑,可参考《ByteHouse 唯一键表最佳实践》
  • 查询操作过多导致的报错
    1. 先核查云监控中的资源指标,确认是否存在瓶颈:
      • CPU 占用率
      • 内存占用率
      • 磁盘读带宽
      • 磁盘写带宽
    2. 若存在资源瓶颈:
      • 建议扩容 VW(Virtual Warehouse),或启用自动扩容功能;
      • 对执行的查询语句进行优化。
    3. 若不存在资源瓶颈:
      • 调整计算组参数,提高max_concurrent_queries(最大并发查询数)的值;
      • 参数调节可参考《参数管理》文档。

SQL执行报错:Too many simultaneous tasks

  • 报 too many simultaneously tasks 说明是 merge 太多。

解决办法:

  1. 需要优化写入模式,攒批,减小并发,也就是看看能不能加大一条insert内的values 条数,减少频次。
  2. 如果您的计算组是一直会运行的,不会自动停止的,可以 在UI执行 ALTER TABLE your_dabase.your_table MODIFY SETTING cnch_vw_write = 'vw_id' 加快后台的数据merge速度。

SQL写入报错:Too many partitions for single INSERT block (more than 100)

  • 完整报错:Too many partitions for single INSERT block (more than 100). The limit is controlled by 'max_partitions_per_insert_block' setting. Large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000..10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast).

  • 可能原因:说明当前单次攒批INSERT写入了多个分区(默认100)。分区文件过多,可能会严重影响导入效果和查询速度。

  • 解决方案:

    1. 可以在任务里面进行优化下写入模式,每一个insert里面的values尽量在一个分区下的数据。
    2. 调整目标表DDL 分区键尽量按照日期进行天,月粒度聚合分区。
    PARTITION BY (toDate(`event_time`))
    
    1. 在SQL后面把限制加大,但是不建议太大,例如 :insert into tabla_name values('1') settings max_partitions_per_insert_block = xxx

      说明

      delete命令不支持setting , 可以临时设置 session级别的 如: set max_partitions_per_insert_block = xxx;,再执行sql

查询报错:5分钟后查询失败,报错EOF或者I/O timeout

查询超时,需要添加以下参数来增大超时时间(单位为秒)

  • max_execution_time
  • send_timeout
  • receive_timeout

以JDBC为例:

jdbc:bytehouse://gateway-qa.volc-boe-new.offline.bytehouse.cn:19000?api_key=xxx&send_timeout=10000&receive_timeout=10000&max_execution_time=10000

或者session级别设置,在执行sql前先执行

set receive_timeout = 10800000, send_timeout = 10800000;  

SQL 偶发报错: Code: 2010

报错信息示例如下:

Code: 2010, e.displayText() = DB::Exception: Query [6xxxxx-fxxx-4xxx-axxx-dxxxxxxxxxx3] failed with RootCause: SegmentId: 0, ErrorCode:2010, Message: Fail to call DB.Protos.RegistryService.registry, error code: 1011, msg: [E1011][192.168.

解答:
RPC 通信的 socket 队列里的 buffer 超出限制,可先增大该 buffer 的大小。
需要在 server 和计算组两个层面同时配置 socket_max_unwritten_bytes 参数。

函数

finderGroupFunnel函数如何使用?

有函数名从 vvcfunnelOpt 变成了 finderGroupFunnel,这个 函数 不支持 不配置 mode ,如果没有填 mode 值,直接填后面的 chekc_envent 参数校验时会不通过,或者通过了但结果不符合预期,比如把传入的第一个事件字段当作分组字段,第二个事件字段当作第一个事件字段。

外表

配置MySQL 外部表时,是否支持内网访问?

不支持内网访问,这个功能还不开放,需求在评估排期中,预计在2025年会排期。

配置MySQL外部表时,MySQL需要开放哪些ip 和端口作为白名单?

当前不支持内网访问,需要配置公网访问,只需要开放bytehouse cdw 的公网访问就可以了,公网信息详情请参见地域及可用区

  • 端口:随机,请开放所有端口。

  • IP地址:不同region 的公网访问地址如下。

    区域 Regions

    公网出口 IP

    华北2(北京)

    111.62.122.179

    华东2(上海)

    180.184.161.45

    华南1(广州)

    118.145.156.236

数据导入

如何配置Kafka数据源?

Kafka场景

配置要点

kafka集群配置了公网访问地址

直接页面配置,地址用kafka公网地址
Image

Kafka无公网访问地址,且与ByteHouse在同一地域
包括,同主账号下的kafka云产品、同主账号下自建kafka集群、不同主账号下的kafka云产品、不同主账号下自建kafka集群。

可使用私网地址对接ByteHouse,参考文档:ByteHouse Kafka Import with Private IP address

Kafka无公网访问地址,且与ByteHouse不在同一地域
包括,不同region下的火山云kafka云产品,不同region下的火山云kafka自建集群,其他云厂商或者自建集群。

建议使用datasail 链路是 : 客户kafka -> sail -> cdw

Kafka数据导入时,如何将Kafka的一个字段多次提取到ByteHouse表中多个字段?

第一个列用相同名,后面的都用 col01,cil02 。。。,中间表达式来引用,例如,kafka字段数据是 :"ds_http_uri_query": "a=1&b=2", 取出字段 a,和b 的值到ByteHouse的两个字段

  • a字段: extractURLParameter(concat('http://?',ds_http_uri_query), 'a')
  • b字段: extractURLParameter(concat('http://?',ds_http_uri_query), 'b')

嵌套解析的详情请参见Kafka 流式数据导入实践:JSON 嵌套解析

如何配置日期解析格式?

ByteHouse 数据导入默认支持自动解析的日期格式为:yyyy-MM-dd'T'HH:mm:ss ( Java 默认的时间格式),注意年月日和十份秒中间用常量 T 隔开。如果您的数据使用其他格式,则需要手动配置,配置步骤如下:

  1. 上传文件后,在格式为 Date/DateTime 等日期格式的源列中,单击编辑按钮打开格式配置。
    Image
  2. 在格式列表中选择对应的时间格式。
    Image
  3. 如果未找到您需要的日期格式,可滚动格式列表到底部,单击新建格式,输入您所需的日志格式。该格式 format 为 Joda。
    Image

导入文件时如何配置时区?

在使用本地小文件导入或其他导入方式导入文件时,通常会遇到时区导入异常(比如时区被 +8,或者时区被 -8)等问题。本节将介绍一些导入方式的最佳实践,避免类似问题。

使用推荐数据格式

建议用以下两种方式在文件中存储时间,可以避免导入时转换日期的时区问题。

方案一:使用带时区的日期格式

建议存储日期时添加时区信息。

带时区的信息(推荐)

不带时区信息的日期(不推荐)

样例值

2025-01-02 12:13:14+0800

2025-01-02 12:13:14

对应格式

yyyy-MM-dd HH:mm:ssZ
Image

yyyy-MM-dd HH:mm:ss
Image

方案二:使用 Int 类型存储日期

对于时间精度较高的日期,建议使用 Int 类型存储日期。

精度为秒

精度为毫秒

样例值

1735791194

1735791194000

对应格式

seconds
Image

milliseconds
Image

建表时指定时间分区

建表时,如果时间类型的列在分区中,建议明确指定时间分区,示例如下:
Image

最近更新时间:2026.03.02 17:37:02
这个页面对您有帮助吗?
有用
有用
无用
无用