Doris 入门:基本操作(三)

这篇具有很好参考价值的文章主要介绍了Doris 入门:基本操作(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、创建用户和数据库

  • 创建用户
    • CREATE USER ‘test’ IDENTIFIED BY ‘123456’;
    • 后续登录就可以直接使用命令登录
      • mysql -h 192.168.1.101 -P9030 -utest -p12345
  • 创建数据库并赋予权限
    • 初始可以通过 root 或 admin 用户创建数据库
      • create database test_db;
    • 查看数据库
      • show databases;
    • 授权
      • grant all on test_db to test;
    • 注意
      • 可以使用 help command 查看语法帮助,不清楚命令全名的话可以使用 ‘help 某一字段’ 进行模糊查询
      • information_schema 数据库是为了兼容 MySQL 协议而存在的

二、建表

1. 基本概念

  • Doris 数据都以表 Table 的形式进行逻辑上的描述,一张表包括 行 Row 和 列 Column,Row 就是用户一行数据
  • 从表的角度来看,一张 Table 会拆成多个 Tablet,Tablet 会存成多副本,存储在不同的 BE 中,BE 节点上物理数据的可靠性通过多副本来实现,默认 3 副本
  • Tablet 和 Partition
    • Doris 存储引擎中,用户数据被水平划分为若干数据分片 Tablet,也称为数据分桶,每个 Tablet 包含若干行数据,和其他 Tablet 没有交集,物理上独立存储
    • 多个 Tablet 在逻辑上归属于不同的分区 Partition,一个 Tablet 只属于一个 Partition,一个 Partition 包含若干个 Tablet,若干个 Partition 组成一个 Table
    • Tablet 是数据移动、复制等操作的最小物理存储单元,Partition 可以视为逻辑上最小的管理单元,数据导入和删除,都可以针对一个 Partition 进行
  • Doris 存储引擎规则
    • 用户数据首先被划分成若干个分区 Partition,划分对规则通常是按照用户指定的分区进行范围划分,比如按时间划分
    • 在每个分区内,数据被进一步按照 Hash 的方式分桶,分桶的规则是要找用户指定的分桶列的值进行 Hash 后分桶,每个分桶就是一个 Tablet,也是最小数据划分逻辑单元
    • Partition 可以视为逻辑上最小的管理单元,数据的导入与删除,都可以针对一个 Partition 进行
    • Tablet 直接的数据是没有交集的,独立存储,Tablet 也是数据移动、复制操作的最小物理存储单元

2. 创建表

  • 首先需要切换数据库(use test_db
  • 使用帮助命令可以查看很多案例 help create table
  • 数据类型
    • tinyint、smallint、int、bigint、largeint、float、double、decimal(precision,scale)、date、datetime、char(length)、varchar(length)、hll、bitmap、agg_type
  • 建表方式
    • 单分区
      • 即数据不分区,只做 HASH 分布,也就是分桶
    • 复合分区
      • 第一级为 Partition,即分区,用户可以指定某一纬度列作为分区列(整型、时间类型),并指定分区取值范围
      • 第二级为 Distribution,即分桶,用户指定一个或多个纬度列以及桶数对数据进行 HASH 分布
    • 使用复合分区的场景
      • 有时间纬度或类似带有有序值的纬度:可以以这类纬度列作为分区列,分区粒度可以根据导入频次、分区数量等进行评估
      • 历史数据删除需求:可以通过删除历史分区来达到目的,也可以通过在指定分区内发送 DELETE 语句进行数据删除
      • 解决数据倾斜问题:每个分区可以单独指定分桶数量,如按天分区,当天的数据量差异很大时,可以通过指定分区的分桶数,合理划分不同分区的数据,分桶列建议选择区分度大的列

3. 数据导入

  • 相关文档:https://doris.apache.org/zh-CN/docs/data-operate/import/load-manual

  • 所有导入方式都支持 CSV 数据格式,Broker load 还支持 parquet 和 orc 数据格式

  • Stream load

    • 用户通过 HTTP 协议提交请求并携带原始数据创建导入,主要用于快速将本地文件或数据流中的数据导入到 Doris,导入命令同步返回导入结果
    • curl --location-trusted -u root:123456 -H “label:table1_20221121” -H “column_separator:,” -T table1_data http://hybrid01:8030/api/test_db/table1/_stream_loadDoris 入门:基本操作(三)
  • Insert

    • 类似 MySQL 中的 Insert 语句,Doris 提供 inssert into tbl SELECT …; 的方式从 Doris 表中读取数据并导入到另一张表或 insert into tbl values(…) 插入
    • insert into table1 values(1,1,‘user1’,10);
  • Broker load

    • 通过 Broker 进程访问并读取外部数据源导入到 Doris,用户通过 MySQL 协议提交导入任务后,异步执行,show load 命令查看导入结果
    • 具体语法案例见代码
  • Multi load

    • 用户通过 HTTP 协议提交多个导入作业,Multi Load 可以保证多个导入作业的原子生效
  • Routine load

    • 通过 MySQL 协议提交例行导入作业,生成一个常驻线程,不间断从数据源中读取数据并导入到 Doris 中
    • 目前仅支持 Kafka 进行导入,支持无认证、SSL 认证的 Kafka 集群,支持的格式为 csv 文本格式,每个 message 为一行,行尾不包括换行符
    • 原理
      • FE 通过 JobScheduler 将一个导入任务拆分成若干个 Task,每个 Task 负责导入指定的一部分数据,Task 被 TaskScheduler 分配到指定的 BE 上执行
      • 在 BE 上,一个 Task 被视为一个普通的导入任务,通过 Stream Load 的导入机制进行导入,导入完成后向 FE 汇报
      • FE 中的 JobScheduler 根据汇报结果,继续生成后续新的 Task,或者对失败的 Task 进行重试
      • 整个例行导入作业通过不断的产生新的 Task 来完成数据不间断的导入
    • 具体语法案例见代码
  • 通过 S3 协议直接导入

    • 用法和 Broker Load 类似

三、代码案例

-- 建表语句案例
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...]
[, index_definition1[, index_definition2, ...]])
[ENGINE = [olap|mysql|broker|hive|iceberg]]
[key_desc]
[COMMENT "table comment"];
[partition_desc]
[distribution_desc]
[rollup_index]
[PROPERTIES ("key"="value", ...)]
[BROKER PROPERTIES ("key"="value", ...)]
    
-- 创建表-单分区表
CREATE TABLE test_db.table1
(
  siteid INT DEFAULT '10',
  citycode SMALLINT,
  username VARCHAR(32) DEFAULT '',
  pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(siteid, citycode, username)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1");

-- insert 导入
insert into table1 values(1,1,'user1',10);
insert into table1 values(1,1,'user1',10);
insert into table1 values(1,2,'user1',10);

-- 创建表-复合分区表
-- event_day 作为分区列,建立三个分区,每个分区使用 siteid 进行哈希分桶,桶数为10
-- p202209: 范围[最小值,2022-10-01]
-- p202210: 范围[2022-10-01, 2022-11-01]
-- p202211: 范围[2022-11-01, 2022-12-01]
-- 左闭右开
CREATE TABLE test_db.table2
(
	event_day DATE,
	siteid INT DEFAULT '10',
	citycode SMALLINT,
	username VARCHAR(32) DEFAULT '',
	pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(event_day,siteid,citycode,username)
PARTITION BY RANGE(event_day)
(
	PARTITION p202209 VALUES LESS THAN ('2022-10-01'),
	PARTITION p202210 VALUES LESS THAN ('2022-11-01'),
	PARTITION p202211 VALUES LESS THAN ('2022-12-01')
)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "3");

-- Broker 导入,broker_id 就是 broker 的名字,最后一个是能容忍的错误数据量
LOAD LABEL test_db.table2
(
  DATA INFILE("hdfs://hybrid01:8020/data/table2_data.csv")
  INTO TABLE `table2`
  COLUMNS TERMINATED BY ","
  FORMAT AS "csv"
  (
    event_day,siteid,citycode,username,pv
  )
)
WITH BROKER broker_id
(
  "dfs.nameservices" = "my_cluster",
  "dfs.ha.namenodes.my_cluster" = "nn1,nn2,nn3",
  "dfs.namenode.rpc-address.my_cluster.nn1" = "hybrid01:8020",
  "dfs.namenode.rpc-address.my_cluster.nn2" = "hybrid02:8020",
  "dfs.namenode.rpc-address.my_cluster.nn3" = "hybrid03:8020",
  "dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
)
PROPERTIES
(
  "max_filter_ratio" = "0.00002"
);

-- Routine load 案例
CREATE TABLE student_kafka
(
  id int,
  name varchar(50),
  age int
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 10;

-- 创建导入任务,任务名字 kafka_job1
CREATE ROUTINE LOAD test_db.kafka_job1 on student_kafka
PROPERTIES
(
  "desired_concurrent_number"="1",
  "strict_mode"="false",
  "format"="json"
)
FROM KAFKA
(
  "kafka_broker_list"="hybrid01:9092,hybrid02:9092,hybrid03:9092",
  "kafka_topic"="test",
  "property.group.id"="test_group_1",
  "property.kafka_default_offsets"="OFFSET_BEGINNING",
  "property.enable.auto.commit"="false"
);

Doris 入门:基本操作(三)文章来源地址https://www.toymoban.com/news/detail-491660.html

到了这里,关于Doris 入门:基本操作(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库基本操作

    功能 sql 查看所有数据库 show databases; 创建数据库 create  database [if not exists] mydb1 [charset=utf8] 切换数据库 use mydb1; 删除数据库 drop database [if exists] mydb1 ; 修改数据库编码 alter database mydb1 character set utf8; 数值类型 字符串类型 日期类型 功能 sql 查看当前数据库所有名称 show tabl

    2024年02月02日
    浏览(53)
  • SQL 数据库基本操作

    打开 SSMS(Microsoft SQL Server Management Studio),“对象资源管理器” 窗口列表中依次双击 “UERE-20220228OY” → ”数据库“ → ”系统数据库“ (”UERE-20220228OY“ 是系统连接的服务器名称,不同的计算机中名称不尽相同),在展开的列表中可看到 4个已经存在的数据库,分别为

    2024年02月08日
    浏览(45)
  • 数据库概念及基本操作

    目录 一、数据库的基本概念 1、数据 2、表 3、数据库 4、数据库管理系统 5、DBMS的工作模式 6、关系数据库 7、非关系数据库 8、关系型数据库和非关系型数据库的区别 二、数据库基本操作 1、数据库的列类型 2、数据库基本操作 数据库是“按照数据结构来组织、存储和管理数

    2024年02月13日
    浏览(24)
  • kibana创建索引、文档基本操作

    众所周知,es和数据库的操作十分相似,只是在一些称呼上有所不同,如图 因此,想要在es上存储文档,就得先 创建索引 (好比想要在数据库存储数据,就得先创建表,才能在表里插入数据)。这次笔者主要是通过kibana进行es相应操作,所以给出kibana对应的索引、文档操作。

    2023年04月23日
    浏览(43)
  • 【Linux】操作系统的基本概念 {冯诺依曼体系结构,操作系统的基本概念,系统调用及用户操作接口,shell程序}

    现代计算机设计大都遵守冯·诺依曼体系结构: 截至目前,我们所认识的计算机,都是由一个个的硬件组件组成 输入单元:包括键盘, 鼠标,扫描仪, 磁盘,网卡等 存储器: 内存(提高数据读写速度,降低硬件成本) 中央处理器(CPU):含有运算器(算数运算,逻辑运算)和控

    2024年02月11日
    浏览(38)
  • Django基本数据库操作

    @ 目录 Django基本数据库操作 👨‍🏫内容一:基本数据库配置 👨‍🔬内容二:ORM基本操作 👉Django是一个流行的Python Web框架,它可以使用不同的数据库引擎来存储和管理数据。Django默认使用sqlite数据库,但是你也可以配置它使用mysql数据库。这里我将配置的是本地的Mysql数据

    2024年02月16日
    浏览(33)
  • 【MySQL】数据库的基本操作

    目录 1. 创建数据库 2. 创建数据库案例 3 字符集和校验规则 3.1 查看系统默认字符集以及校验规则 3.2 查看数据库支持的字符集 3.3 查看数据库支持的字符集校验规则 3.4 校验规则对数据库的影响 4. 操纵数据库 4.1 查看数据库 4.2 显示创建语句 4.2 修改数据库 4.4 数据库删除 4

    2024年02月08日
    浏览(39)
  • 数据库实验一:基本表操作、基本数据查询和复杂数据查询

    按下图创建四个表:teacher、student、course和SC,为属性选择合适的域、合适的主码和外键约束,并为他们插入所列出数据; 中文语义 teacher (TID,TNAME,DEPT,SALARY) 教师(教工号,姓名,系,薪水) student (SID,SNAME,DEPT,AGE,GENDER) 学生(学号,姓名,系,年龄,性别) course (CID,CNAME,DE

    2024年02月01日
    浏览(44)
  • MySQL数据库---库基本操作 以及 表结构的操作(DDL)

    目录 前言 一.数据库的操作 1.1显示当前数据库 1.2创建数据库 1.3使用数据库  1.4删除数据库  二.数据类型 2.1数值类型 2.2字符串类型 2.3日期类型 三.数据表的操作  3.1 创建表结构。  3.2查看数据库中拥有的数据表  3.3查看指定的表结构   3.4修改表结构   3.5删除表结构  

    2024年02月09日
    浏览(52)
  • MySQL数据库——DML基本操作

    前面我们学习了MySQL——DDL操作,对数据库和表的结构的操作,那么今天我将为大家分享MySQL——DML操作,对表数据的操作。 MySQL DML操作有以下几种: 插入操作(INSERT):用于向数据库中插入新的数据行。可以一次插入单行数据,也可以使用一条SQL语句一次性插入多行数据。

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包