doris:时区管理

Doris 支持自定义时区设置

基本概念​

Doris 内部存在以下两个时区相关参数:

  • system_time_zone : 当服务器启动时,系统会根据机器设置时区自动设置,设置后不可修改。

  • time_zone : 集群当前时区,可以修改。集群启动时,该变量会设置为与 system_time_zone 相同,之后不再变动,除非用户手动修改。

具体操作​

  1. show variables like '%time_zone%'

    查看当前时区相关配置

  2. SET [global] time_zone = 'Asia/Shanghai'

    该命令可以设置 Session 级别的时区,如使用 global 关键字,则 Doris FE 会将参数持久化,之后对所有新 Session 生效。

数据来源​

时区数据包含时区名、对应时间偏移量、夏令时变化情况等。在 BE 所在机器上,其数据来源为 TZDIR 命令返回的目录,如不支持该命令,则为 /usr/share/zoneinfo 目录。

时区的影响​

1. 函数​

包括 NOW() 或 CURTIME() 等时间函数显示的值,也包括 show loadshow backends 中的时间值。

但不会影响 create table 中时间类型分区列的 less than 值,也不会影响存储为 date/datetime 类型的值的显示。

受时区影响的函数:

  • FROM_UNIXTIME:给定一个 UTC 时间戳,返回其在 Doris session time_zone 指定时区的日期时间,如time_zoneCSTFROM_UNIXTIME(0)返回1970-01-01 08:00:00

  • UNIX_TIMESTAMP:给定一个日期时间,返回其在 Doris session time_zone 指定时区下的 UTC 时间戳,如time_zoneCSTUNIX_TIMESTAMP('1970-01-01 08:00:00')返回0

  • CURTIME:返回当前 Doris session time_zone 指定时区的时间。

  • NOW:返回当前 Doris session time_zone 指定时区的日期时间。

  • CONVERT_TZ:将一个日期时间从一个指定时区转换到另一个指定时区。

2. 时间类型的值​

对于DATEDATETIME类型,我们支持导入数据时对时区进行转换。

  • 如果数据带有时区,如 "2020-12-12 12:12:12+08:00",而 Stream Load 指定的 Header timezone 为 +00:00 ,则数据导入 Doris 得到实际值为 "2020-12-12 04:12:12"。

  • 如果数据不带有时区,如 "2020-12-12 12:12:12",则认为该时间为绝对时间,不发生任何转换。

3. 夏令时​

夏令时的本质是具名时区的实际时间偏移量,在一定日期内发生改变。

例如,America/Los_Angeles时区包含一次夏令时调整,起止时间为约为每年 3 月至 11 月。即,三月份夏令时开始时,America/Los_Angeles实际时区偏移由-08:00变为-07:00,11 月夏令时结束时,又从-07:00变为-08:00。 如果不希望开启夏令时,则应设定 time_zone 为 -08:00 而非 America/Los_Angeles

使用方式​

时区值可以使用多种格式给出,以下是 Doris 中完善支持的标准格式:

  1. 标准具名时区格式,如 "Asia/Shanghai", "America/Los_Angeles"。此类格式来源于本机所带时区数据,如 "Etc/GMT+3" 等亦属此列。

  2. 标准偏移格式,如 "+02:30", "-10:00"(不支持诸如 "+12:03" 等特殊偏移)

  3. 缩写时区格式,当前仅支持:

    1. "GMT", "UTC",等同于 "+00:00" 时区

    2. "CST", 等同于 "Asia/Shanghai" 时区

  4. 单字母 Z,代表 Zulu 时区,等同于 "+00:00" 时区

此外,对任何字母的解析不区分大小写。

注意:由于实现方式的不同,当前 Doris 存在部分其他格式在部分导入方式中得到了支持。生产环境不应当依赖这些未列于此的格式,它们的行为随时可能发生变化,请关注版本更新时的相关 changelog。

最佳实践​

时区敏感数据​

时区问题主要涉及三个影响因素:

  1. session variable time_zone —— 集群时区

  2. Stream Load、Broker Load 等导入时指定的 header timezone —— 导入时区

  3. 时区类型字面量 "2023-12-12 08:00:00+08:00" 中的 "+08:00" —— 数据时区

我们可以做如下理解:

Doris 目前兼容各时区下的数据向 Doris 中进行导入。而由于 Doris 自身 DATETIME 等各个时间类型本身不内含时区信息,且数据在导入后不会随时区变化而变更,因此时间数据导入 Doris 时,可分为如下两类:

  1. 绝对时间

    绝对时间是指,它所关联的数据场景与时区无关。对于这类数据,在导入时应该不带有任何时区后缀,它们将被原样存储。

  2. 特定时区下的时间

    某个特定时区下的时间是指,它所关联的数据场景与时区有关。对于这类数据,在导入时应该带有具体时区后缀,导入时它们将被转化至 Doris 集群 time_zone 时区或 Stream Load/Broker Load 中指定的 header timezone

    这类数据在导入后即被转化至导入时指定时区下的绝对时间存储,故后续导入和查询应当保持此时区,以免数据意义发生紊乱。

  • 对于 Insert 语句,我们可以通过以下例子来说明:

    Doris > select @@time_zone;
    +---------------+
    | @@time_zone   |
    +---------------+
    | Asia/Shanghai |
    +---------------+Doris > insert into dt values('2020-12-12 12:12:12+02:00'); --- 导入的数据中指定了时区为 +02:00Doris > select * from dt;
    +---------------------+
    | dt                  |
    +---------------------+
    | 2020-12-12 18:12:12 | --- 被转换为 Doris 集群时区 Asia/Shanghai,后续导入和查询应当保持此时区。
    +---------------------+Doris > set time_zone = 'America/Los_Angeles';Doris > select * from dt;
    +---------------------+
    | dt                  |
    +---------------------+
    | 2020-12-12 18:12:12 | --- 如果修改 time_zone,时间值不会随之改变,其查询时的意义发生紊乱。
    +---------------------+
    

  • 对于 Stream Load、Broker Load 等导入方式,我们可以通过指定 header timezone 来实现。例如,对于 Stream Load,我们可以通过以下例子来说明:

     cat dt.csv2020-12-12 12:12:12+02:00curl --location-trusted -u root: \-H "Expect:100-continue" \-H "strict_mode: true" \-H "timezone: Asia/Shanghai" \-T dt.csv -XPUT \http://127.0.0.1:8030/api/test/dt/_stream_load
    

    Doris > select @@time_zone;
    +---------------+
    | @@time_zone   |
    +---------------+
    | Asia/Shanghai |
    +---------------+Doris > select * from dt;
    +---------------------+
    | dt                  |
    +---------------------+
    | 2020-12-12 18:12:12 | --- 被转换为 Doris 集群时区 Asia/Shanghai,后续导入和查询应当保持此时区。
    +---------------------+
    

    提示

    • Stream Load、Broker Load 等导入方式中,header timezone 会覆盖 Doris 集群 time_zone,因此在导入时应当保持一致。
    • Stream Load、Broker Load 等导入方式中,header timezone 会影响导入转换中使用的函数。
    • 如果导入时未指定 header timezone,则默认使用东八区。

综上所述,处理时区问题最佳的实践是:

最佳实践

  1. 在使用前确认该集群所表征的时区并设置 time_zone,在此之后不再更改。

  2. 在导入时设定 header timezone 同集群 time_zone 一致。

  3. 对于绝对时间,导入时不带时区后缀;对于有时区的时间,导入时带具体时区后缀,导入后将被转化至 Doris time_zone 时区。

夏令时​

夏令时的起讫时间来自当前时区数据源,不一定与当年度时区所在地官方实际确认时间完全一致。该数据由 ICANN 进行维护。如果需要确保夏令时表现与当年度实际规定一致,请保证 Doris 所选择的数据源为最新的 ICANN 所公布时区数据,下载途径见下文。

信息更新​

真实世界中的时区与夏令时相关数据,将会因各种原因而不定期发生变化。IANA 会定期记录这些变化并更新相应时区文件。如果希望 Doris 中的时区信息与最新的 IANA 数据保持一致,请采取下列方式进行更新:

  1. 使用包管理器更新

根据当前操作系统使用的包管理器,用户可以使用对应的命令直接更新时区数据:

# yum
> sudo yum update tzdata
# apt
> sudo apt update tzdata

该方式更新的数据位于系统 $TZDIR 下(一般为 usr/share/zoneinfo)。

  1. 直接拉取 IANA 时区数据库(推荐)

大多数 Linux 发行版的包管理器,tzdata 的同步并不及时。如果对时区数据准确性要求较高,可以直接拉取 IANA 定期公布的数据:

wget https://www.iana.org/time-zones/repository/tzdb-latest.tar.lz

然后根据解压后文件夹中的 README 文件,生成具体的 zoneinfo 数据。生成的数据应当拷贝并覆盖 $TZDIR 目录。

请注意,以上所有操作在 BE 所在机器上完成后,都必须重启对应 BE 才能生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38022.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP SD学习笔记33 - 预詑品(寄售物料),预詑品引渡(KB),预詑品出库(KE)

上一章讲了Service品目。 SAP SD学习笔记32 - Service品目(服务产品)-CSDN博客 本章继续讲SAP SD的知识 - 预詑品(寄售物料)。 目录 1,预詑品概要 1-1,预詑品(寄售物料)的概念 1-2,预詑品的4种业务 1-3,受托品与…

DeiT:数据高效的图像Transformer及其工作原理详解

DeiT:数据高效的图像Transformer及其工作原理详解 随着Transformer架构在自然语言处理(NLP)领域的巨大成功,研究者们开始探索其在计算机视觉领域的应用。Vision Transformer(ViT)是最早将Transformer直接应…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的异常处理:全局异常与自定义异常

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

【Mybatis-plus】在mybatis-plus中 if test标签如何判断 list不为空

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

Lineageos 22.1(Android 15)制定应用强制横屏

一、前言 有时候需要系统的某个应用强制衡平显示&#xff0c;不管他是如何配置的。我们只需要简单的拿到top的Task下面的ActivityRecord&#xff0c;并判断包名来强制实现。 二、调整wms com.android.server.wm.DisplayRotation /*** Given an orientation constant, return…

HTML网页代码预览器

HTML网页代码预览器 可以用于学习和实验HTML和CSS&#xff0c;比较方便。源码参考自网络。 功能 实时预览&#xff1a;当你在左侧的“代码编辑器”中输入代码时&#xff0c;右侧的“预览窗口”会实时显示你的网页效果&#xff08;注意&#xff0c;不能体现嵌入的JavaScript运…

Arm Linux ceres库编译

由于工作需要&#xff0c;需在国产化系统上编译ceres库&#xff0c;手上有一块树莓派&#xff0c;就在树莓派上面进行测试编译ceres库&#xff0c;总体来说比较顺利。只出现了一点小问题 参考链接&#xff1a; Ceres中文教程-安装 按照上面Linux编译过程 目录 1、在线安装依赖…

【算法学习计划】动态规划 -- 背包问题(01背包和完全背包)

目录 DP41 【模板】01背包 leetcode 416.分割等和子集 leetcode 494.目标和 leetcode 1049.最后一块石头的重量Ⅱ DP42 【模板】完全背包 leetcode 322.零钱兑换 leetcode 518.零钱兑换Ⅱ leetcode 279.完全平方数 今天&#xff0c;我们将通过 8 道题目&#xff0c;来带…

138. 随机链表的复制

题目&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节…

网络HTTPS协议

Https HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 HTTP 协议的加密版本&#xff0c;它使用 SSL/TLS 协议来加密客户端和服务器之间的通信。具体来说&#xff1a; • 加密通信&#xff1a;在用户请求访问一个 HTTPS 网站时&#xff0c;客户端&#x…

19921 多重背包

19921 多重背包 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;动态规划、背包问题 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N …

C/C++蓝桥杯算法真题打卡(Day5)

一、P8772 [蓝桥杯 2022 省 A] 求和 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用标准库函数时都要加 std::int main() {int n; …

【大模型基础_毛玉仁】3.5 Prompt相关应用

目录 3.5 相关应用3.5.1 基于大语言模型的Agent3.5.2 数据合成3.5.3 Text-to-SQL3.5.4 GPTs 3.5 相关应用 Prompt工程应用广泛&#xff0c;能提升大语言模型处理基础及复杂任务的能力&#xff0c;在构建Agent、数据合成、Text-to-SQL转换和设计个性化GPTs等方面不可或缺。 . …

主成分分析PCA与奇异值分解SVD

线性代数 SVD 奇异值分解&#xff08;Singular Value Decomposition&#xff0c;简称 SVD&#xff09;是线性代数中的一种基本工具&#xff0c;它将任意一个 (m * n) 矩阵 (A) 分解成三个简单矩阵的乘积&#xff0c;即 其中&#xff1a; (U) 是一个 (m*m) 的正交&#xff08…

自主代理的摩尔定律:AI 的指数级革命

图像由 Gemini 生成 前言&#xff1a;AI 正在以超过摩尔定律的速度迅速提升其自主工作能力&#xff0c;研究显示&#xff0c;AI 能够可靠完成的任务时长正以每 7 个月翻一倍的速度增长。这种指数级的发展趋势意味着&#xff0c;AI 不再只是应对简单问答或短任务的工具&#xff…

气膜文化馆:打造沉浸式文娱新空间—轻空间

演唱会、展览、音乐剧……都能办&#xff1f; 当然&#xff01;气膜文化馆不仅适用于体育赛事&#xff0c;在文化娱乐方面同样大放异彩&#xff01; 声学优化&#xff0c;打造极致听觉体验 气膜文化馆采用专业声学设计&#xff0c;避免传统场馆的回声干扰&#xff0c;提供更清…

【数据标准】数据标准化框架体系-对象类数据标准

导读&#xff1a;对象类数据标准化框架通过统一数据定义、分类和标记&#xff0c;解决数据孤岛与不一致问题&#xff0c;支撑数据分析、AI应用与合规需求。企业需结合自身业务特性&#xff0c;灵活选择国际标准&#xff08;如ISO&#xff09;、行业规范或自建体系&#xff0c;并…

【江协科技STM32】软件SPI读写W25Q64芯片(学习笔记)

SPI通信协议及S为5Q64简介&#xff1a;【STM32】SPI通信协议&W25Q64Flash存储器芯片&#xff08;学习笔记&#xff09;-CSDN博客 STM32与W25Q64模块接线&#xff1a; SPI初始化&#xff1a; 片选SS、始终SCK、MOSI都是主机输出引脚&#xff0c;输出引脚配置为推挽输出&…

C 语 言 --- 扫 雷 游 戏(初 阶 版)

C 语 言 --- 扫 雷 游 戏 初 阶 版 代 码 全 貌 与 功 能 介 绍扫雷游戏的功能说明游 戏 效 果 展 示游 戏 代 码 详 解game.htest.cgame.c 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你 入 门 C 语 言 &#x1f4a1;个 人 主…

数据库基础知识

目录 一、什么是数据库&#xff1f; 二、基本使用方法 &#xff08;1&#xff09;启动服务器进程 &#xff08;2&#xff09;连接服务器 &#xff08;3&#xff09;基本sql语句 三、MySQL架构 四、SQL语句分类 五、存储引擎是什么 一、什么是数据库&#xff1f; 数据库…