亚洲女爱视频在线_好吊成人免视频_国产精品婷婷午夜在线观看_欧美精品v国产精品v日韩精品

首頁 >圖片 >
Doris(五) -- 數據的導入導出 全球時訊
發布時間:2023-05-30 20:20:07 文章來源:博客園
#數據導入##使用Insert方式同步數據用戶可以通過MySQL協議,使用INSERT語句進行數據導入INSERT語句的使用方
數據導入使用 Insert 方式同步數據

用戶可以通過 MySQL 協議,使用 INSERT 語句進行數據導入INSERT 語句的使用方式和 MySQL 等數據庫中 INSERT 語句的使用方式類似。 INSERT 語句支持以下兩種語法:

INSERT INTO table SELECT ...INSERT INTO table VALUES(...)

對于 Doris 來說,一個 INSERT 命令就是一個完整的導入事務。

因此不論是導入一條數據,還是多條數據,我們都不建議在生產環境使用這種方式進行數據導入。高頻次的 INSERT 操作會導致在存儲層產生大量的小文件,會嚴重影響系統性能。


(相關資料圖)

該方式僅用于線下簡單測試或低頻少量的操作?;蛘呖梢允褂靡韵路绞竭M行批量的插入操作:

INSERT INTO example_tbl VALUES(1000, "baidu1", 3.25)(2000, "baidu2", 4.25)(3000, "baidu3", 5.25);
Stream Load

用于將本地文件導入到doris中。Stream Load 是通過 HTTP 協議與 Doris 進行連接交互的。該方式中涉及 HOST:PORT 都是對應的HTTP 協議端口。?BE 的 HTTP 協議端口,默認為 8040。?FE 的 HTTP 協議端口,默認為 8030。但須保證客戶端所在機器網絡能夠聯通FE, BE 所在機器。

-- 創建表drop table if exists load_local_file_test;CREATE TABLE IF NOT EXISTS load_local_file_test(    id INT,    name VARCHAR(50),    age TINYINT)unique key(id)DISTRIBUTED BY HASH(id) BUCKETS 3;
# 創建文件1,zss,282,lss,283,ww,88# 導入數據## 語法示例 curl \ -u user:passwd \  # 賬號密碼 -H "label:load_local_file_test" \  # 本次任務的唯一標識 -T 文件地址 \ http://主機名:端口號/api/庫名/表名/_stream_load# user:passwd 為在 Doris 中創建的用戶。初始用戶為 admin / root,密碼初始狀態下為空。# host:port 為 BE 的 HTTP 協議端口,默認是 8040,可以在 Doris 集群 WEB UI頁面查看。# label: 可以在 Header 中指定 Label 唯一標識這個導入任務。curl \ -u root:123 \ -H "label:load_local_file" \ -H "column_separator:," \ -T /root/data/loadfile.txt \http://doitedu01:8040/api/test/load_local_file_test/_stream_load
curl的一些可配置的參數label: 導入任務的標簽,相同標簽的數據無法多次導入。(標簽默認保留30分鐘)column_separator:用于指定導入文件中的列分隔符,默認為\t。line_delimiter:用于指定導入文件中的換行符,默認為\n。columns:用于指定文件中的列和table中列的對應關系,默認一一對應where: 用來過濾導入文件中的數據max_filter_ratio:最大容忍可過濾(數據不規范等原因)的數據比例。默認零容忍。數據不規范不包括通過 where 條件過濾掉的行。partitions: 用于指定這次導入所設計的partition。如果用戶能夠確定數據對應的partition,推薦指定該項。不滿足這些分區的數據將被過濾掉。timeout: 指定導入的超時時間。單位秒。默認是 600 秒??稍O置范圍為 1 秒 ~ 259200 秒。timezone: 指定本次導入所使用的時區。默認為東八區。該參數會影響所有導入涉及的和時區有關的函數結果。exec_mem_limit: 導入內存限制。默認為 2GB。單位為字節。format: 指定導入數據格式,默認是csv,支持json格式。read_json_by_line: 布爾類型,為true表示支持每行讀取一個json對象,默認值為false。merge_type: 數據的合并類型,一共支持三種類型APPEND、DELETE、MERGE 其中,APPEND是默認值,表示這批數據全部需要追加到現有數據中,DELETE 表示刪除與這批數據key相同的所有行,MERGE 語義 需要與delete 條件聯合使用,表示滿足delete 條件的數據按照DELETE 語義處理其余的按照APPEND 語義處理, 示例:-H "merge_type: MERGE" -H "delete: flag=1"delete: 僅在 MERGE下有意義, 表示數據的刪除條件 function_column.sequence_col: 只適用于UNIQUE_KEYS,相同key列下,保證value列按照source_sequence列進行REPLACE, source_sequence可以是數據源中的列,也可以是表結構中的一列。

建議一個導入請求的數據量控制在 1 - 2 GB 以內。如果有大量本地文件,可以分批并發提交。

導入json數據
# 準備數據{"id":1,"name":"liuyan","age":18}{"id":2,"name":"tangyan","age":18}{"id":3,"name":"jinlian","age":18}{"id":4,"name":"dalang","age":18}{"id":5,"name":"qingqing","age":18}curl \ -u root: \ -H "label:load_local_file_json_20221126" \ -H "columns:id,name,age" \ -H "max_filter_ratio:0.1" \ -H "timeout:1000" \ -H "exec_mem_limit:1G" \ -H "where:id>1" \ -H "format:json" \ -H "read_json_by_line:true" \ -H "merge_type:delete" \ -T /root/data/json.txt \http://doitedu01:8040/api/test/load_local_file_test/_stream_load  -H "merge_type:append" \  # 會把id = 3 的這條數據刪除  -H "merge_type:MERGE" \  -H "delete:id=3"
外部存儲數據導入(hdfs)適用場景

?源數據在 Broker 可以訪問的存儲系統中,如 HDFS。?數據量在幾十到百 GB 級別。

基本原理創建提交導入的任務FE生成執行計劃并將執行計劃分發到多個BE節點上(每個BE節點都導入一部分數據)BE收到執行計劃后開始執行,從broker上拉取數據到自己的節點上所有BE都完成后,FE決定是否導入成功,返回結果給客戶端
-- 新建一張表drop table if exists load_hdfs_file_test1;CREATE TABLE IF NOT EXISTS load_hdfs_file_test1(    id INT,    name VARCHAR(50),    age TINYINT)unique key(id)DISTRIBUTED BY HASH(id) BUCKETS 3;
將本地的數據導入到hdfs上面hdfs dfs -put ./loadfile.txt  hdfs://linux01:8020/hdfs dfs -ls  hdfs://linux01:8020/
-- 導入語法LOAD LABEL test.label_202204([MERGE|APPEND|DELETE]  -- 不寫就是appendDATA INFILE("file_path1"[, file_path2, ...]  -- 描述數據的路徑   這邊可以寫多個 ,以逗號分割)[NEGATIVE]               -- 負增長INTO TABLE `table_name`  -- 導入的表名字[PARTITION (p1, p2, ...)] -- 導入到哪些分區,不符合這些分區的就會被過濾掉[COLUMNS TERMINATED BY "column_separator"]  -- 指定分隔符[FORMAT AS "file_type"] -- 指定存儲的文件類型[(column_list)] -- 指定導入哪些列 [COLUMNS FROM PATH AS (c1, c2, ...)]  -- 從路勁中抽取的部分列[SET (column_mapping)] -- 對于列可以做一些映射,寫一些函數-- 這個參數要寫在要寫在set的后面[PRECEDING FILTER predicate]  -- 在mapping前做過濾做一些過濾[WHERE predicate]  -- 在mapping后做一些過濾  比如id>10 [DELETE ON expr] --根據字段去做一些抵消消除的策略  需要配合MERGE[ORDER BY source_sequence] -- 導入數據的時候保證數據順序[PROPERTIES ("key1"="value1", ...)]  -- 一些配置參數
-- 將hdfs上的數據load到表中LOAD LABEL test.label_20221125(DATA INFILE("hdfs://linux01:8020/test.txt")INTO TABLE `load_hdfs_file_test`COLUMNS TERMINATED BY ","(id,name,age))with HDFS ("fs.defaultFS"="hdfs://linux01:8020","hadoop.username"="root")PROPERTIES("timeout"="1200","max_filter_ratio"="0.1");-- 這是一個異步的操作,所以需要去查看下執行的狀態show load order by createtime desc limit 1\G;

從 HDFS 導入數據,使用通配符匹配兩批兩批文件。分別導入到兩個表中

LOAD LABEL example_db.label2(    DATA INFILE("hdfs://linux01:8020/input/file-10*")    INTO TABLE `my_table1`    PARTITION (p1)    COLUMNS TERMINATED BY ","    FORMAT AS "parquet"      (id, tmp_salary, tmp_score)     SET (        salary= tmp_salary + 1000,        score = tmp_score + 10    ),    DATA INFILE("hdfs://linux01:8020/input/file-20*")    INTO TABLE `my_table2`    COLUMNS TERMINATED BY ","    (k1, k2, k3))with HDFS ("fs.defaultFS"="hdfs://linux01:8020","hadoop.username"="root")-- 導入數據,并提取文件路徑中的分區字段LOAD LABEL example_db.label10(    DATA INFILE("hdfs://linux01:8020/user/hive/warehouse/table_name/dt=20221125/*")    INTO TABLE `my_table`    FORMAT AS "csv"    (k1, k2, k3)    COLUMNS FROM PATH AS (dt))WITH BROKER hdfs(    "username"="root",    "password"="123");-- 對待導入數據進行過濾。LOAD LABEL example_db.label6(    DATA INFILE("hdfs://linux01:8020/input/file")    INTO TABLE `my_table`    (k1, k2, k3)    SET (        k2 = k2 + 1    )        PRECEDING FILTER k1 = 1  ==》前置過濾    WHERE k1 > k2   ==》 后置過濾)WITH BROKER hdfs(    "username"="root",    "password"="123");-- 只有原始數據中,k1 = 1,并且轉換后,k1 > k2 的行才會被導入。
取消導入任務

當 Broker load 作業狀態不為 CANCELLED 或 FINISHED 時,可以被用戶手動取消。取消時需要指定待取消導入任務的 Label 。取消導入命令語法可執行 HELP CANCEL LOAD 查看。

CANCEL LOAD [FROM db_name] WHERE LABEL="load_label"; 
通過外部表同步數據

Doris 可以創建外部表。創建完成后,可以通過 SELECT 語句直接查詢外部表的數據,也可以通過 INSERT INTO SELECT 的方式導入外部表的數據。

Doris 外部表目前支持的數據源包括:MySQL,Oracle,Hive,PostgreSQL,SQLServer,Iceberg,ElasticSearch

-- 整體語法CREATE [EXTERNAL] TABLE table_name (  col_name col_type [NULL | NOT NULL] [COMMENT "comment"] ) ENGINE=HIVE[COMMENT "comment"]PROPERTIES (-- 我要映射的hive表在哪個庫里面-- 映射的表名是哪一張-- hive的元數據服務地址 "property_name"="property_value", ...);-- 參數說明:-- 1.外表列 -- 列名要與 Hive 表一一對應-- 列的順序需要與 Hive 表一致-- 必須包含 Hive 表中的全部列-- Hive 表分區列無需指定,與普通列一樣定義即可。 -- 2.ENGINE 需要指定為 HIVE -- 3.PROPERTIES 屬性: -- hive.metastore.uris:Hive Metastore 服務地址 -- database:掛載 Hive 對應的數據庫名 -- table:掛載 Hive 對應的表名 

完成在 Doris 中建立 Hive 外表后,除了無法使用 Doris 中的數據模型(rollup、預聚合、物化視圖等)外,與普通的 Doris OLAP 表并無區別

-- 在Hive 中創建一個測試用表:CREATE TABLE `user_info` (  `id` int,  `name` string,  `age` int) stored as orc;insert into user_info values (1,"zss",18);insert into user_info values (2,"lss",20);insert into user_info values (3,"ww",25);-- Doris 中創建外部表CREATE EXTERNAL TABLE `hive_user_info` ( `id` int,  `name` varchar(10),  `age` int ) ENGINE=HIVE PROPERTIES ( "hive.metastore.uris" = "thrift://linux01:9083", "database" = "db1", "table" = "user_info" );

外部表創建好后,就可以直接在doris中對這個外部表進行查詢了直接查詢外部表,無法利用到doris自身的各種查詢優化機制!

select * from hive_user_info;-- 將數據從外部表導入內部表-- 數據從外部表導入內部表后,就可以利用doris自身的查詢優勢了!-- 假設要導入的目標內部表為: doris_user_info  (需要提前創建)CREATE TABLE IF NOT EXISTS doris_user_info(    id INT,    name VARCHAR(50),    age TINYINT)unique key(id)DISTRIBUTED BY HASH(id) BUCKETS 3;-- 就是用sql查詢,從外部表中select出數據后,insert到內部表即可insert into doris_user_infoselect *from hive_user_info;

注意:Hive 表 Schema 變更不會自動同步,需要在 Doris 中重建 Hive 外表。當前 Hive 的存儲格式僅支持 Text,Parquet 和 ORC 類型

Binlog Load

Binlog Load提供了一種使Doris增量同步用戶在Mysql數據庫中對數據更新操作的CDC(Change Data Capture)功能。

基本原理當前版本設計中,Binlog Load需要依賴canal作為中間媒介,讓canal偽造成一個從節點去獲取Mysql主節點上的Binlog并解析,再由Doris去獲取Canal上解析好的數據,主要涉及Mysql端、Canal端以及Doris端

FE會為每個數據同步作業啟動一個canal client,來向canal server端訂閱并獲取數據。client中的receiver將負責通過Get命令接收數據,每獲取到一個數據batch,都會由consumer根據對應表分發到不同的channel,每個channel都會為此數據batch產生一個發送數據的子任務Task。在FE上,一個Task是channel向BE發送數據的子任務,里面包含分發到當前channel的同一個batch的數據。channel控制著單個表事務的開始、提交、終止。一個事務周期內,一般會從consumer獲取到多個batch的數據,因此會產生多個向BE發送數據的子任務Task,在提交事務成功前,這些Task不會實際生效。滿足一定條件時(比如超過一定時間、達到提交最大數據大?。琧onsumer將會阻塞并通知各個channel提交事務。當且僅當所有channel都提交成功,才會通過Ack命令通知canal并繼續獲取并消費數據。如果有任意channel提交失敗,將會重新從上一次消費成功的位置獲取數據并再次提交(已提交成功的channel不會再次提交以保證冪等性)。整個數據同步作業中,FE通過以上流程不斷的從canal獲取數據并提交到BE,來完成數據同步。Mysql端

在Mysql Cluster模式的主從同步中,二進制日志文件(Binlog)記錄了主節點上的所有數據變化,數據在Cluster的多個節點間同步、備份都要通過Binlog日志進行,從而提高集群的可用性。架構通常由一個主節點(負責寫)和一個或多個從節點(負責讀)構成,所有在主節點上發生的數據變更將會復制給從節點。注意:目前必須要使用Mysql 5.7及以上的版本才能支持Binlog Load功能。

# 打開mysql的二進制binlog日志功能,則需要編輯my.cnf配置文件設置一下。find / -name my.cnf/etc/my.cnf
# 修改mysqld中的一些配置文件[mysqld]server_id = 1log-bin = mysql-binbinlog-format = ROW#binlog-format 的三種模式#ROW   記錄每一行數據的信息#Statement  記錄sql語句#Mixed   上面兩種的混合# 重啟 MySQL 使配置生效systemctl restart mysqld 
-- 創建用戶并授權-- 設置這些參數可以使得mysql的密碼簡單化set global validate_password_length=4; set global validate_password_policy=0; -- 新增一個canal的用戶,讓他監聽所有庫中的所有表,并且設置密碼為canalGRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO "canal"@"%" IDENTIFIED BY "canal" ;-- 刷新一下權限FLUSH PRIVILEGES;-- 準備測試表CREATE TABLE `user_doris2` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  `gender` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
配置 Canal 端

Canal 是屬于阿里巴巴 otter 項目下的一個子項目,主要用途是基于 MySQL 數據庫增量日志解析,提供增量數據訂閱和消費,用于解決跨機房同步的業務場景,建議使用 canal 1.1.5及以上版本。

下載地址:https://github.com/alibaba/canal/releases

# 上傳并解壓 canal deployer壓縮包mkdir /opt/apps/canaltar -zxvf canal.deployer-1.1.5.tar.gz -C /opt/apps/canal# 在 conf 文件夾下新建目錄并重命名 # 一個 canal 服務中可以有多個 instance,conf/下的每一個目錄即是一個實例,每個實例下面都有獨立的配置文件mkdir /opt/apps/canel/conf/doris# 拷貝配置文件模板 cp /opt/apps/canal/conf/example/instance.properties /opt/apps/canal/conf/doris/# 修改 conf/canal.properties 的配置vi canal.properties# 進入找到canal.destinations = example# 將其修改為 我們自己配置的目錄canal.destinations = doris# 修改 instance 配置文件vi instance.properties # 修改:canal.instance.master.address=doitedu01:3306# 啟動sh bin/startup.sh

注意:canal client 和 canal instance 是一一對應的,Binlog Load 已限制多個數據同步作 業不能連接到同一個 destination。

配置目標表
基本語法:CREATE SYNC [db.]job_name( channel_desc, channel_desc ...)binlog_desc-- 參數說明:-- job_name:是數據同步作業在當前數據庫內的唯一標識-- channel_desc :用來定義任務下的數據通道,可表示 MySQL 源表到 doris 目標表的映射關系。在設置此項時,如果存在多個映射關系,必須滿足 MySQL 源表應該與 doris 目標表是一一對應關系,其他的任何映射關系(如一對多關系),檢查語法時都被視為不合法。-- column_mapping:主要指MySQL源表和doris目標表的列之間的映射關系,如果不指定,FE 會默認源表和目標表的列按順序一一對應。但是我們依然建議顯式的指定列的映射關系,這樣當目標表的結構發生變化(比如增加一個 nullable 的列),數據同步作業依然可以進行。否則,當發生上述變動后,因為列映射關系不再一一對應,導入將報錯。 -- binlog_desc:定義了對接遠端 Binlog 地址的一些必要信息,目前可支持的對接類型只有 canal 方式,所有的配置項前都需要加上 canal 前綴。-- canal.server.ip: canal server 的地址 -- canal.server.port: canal server 的端口 -- canal.destination: 前文提到的 instance 的字符串標識 -- canal.batchSize: 每批從 canal server 處獲取的 batch 大小的最大值,默認 8192 -- canal.username: instance 的用戶名 -- canal.password: instance 的密碼 -- canal.debug: 設置為 true 時,會將 batch 和每一行數據的詳細信息都打印出來,會影響性能。-- Doris 創建與 Mysql 對應的目標表CREATE TABLE `binlog_mysql` (  `id` int(11) NOT NULL COMMENT "",  `name` VARCHAR(50) NOT NULL COMMENT "",  `age` int(11) NOT NULL COMMENT "" , `gender` VARCHAR(50) NOT NULL COMMENT "") ENGINE=OLAP UNIQUE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1; CREATE SYNC test.job20221228( FROM test.binlog_test INTO binlog_test)FROM BINLOG ( "type" = "canal", "canal.server.ip" = "linux01", "canal.server.port" = "11111", "canal.destination" = "doris", "canal.username" = "canal", "canal.password" = "canal");-- 查看作業狀態-- 展示當前數據庫的所有數據同步作業狀態。 SHOW SYNC JOB; -- 展示數據庫 `test_db` 下的所有數據同步作業狀態。 SHOW SYNC JOB FROM `test`; -- 停止名稱為 `job_name` 的數據同步作業 STOP SYNC JOB [db.]job_name -- 暫停名稱為 `job_name` 的數據同步作業 PAUSE SYNC JOB [db.]job_name -- 恢復名稱為 `job_name` 的數據同步作業 RESUME SYNC JOB `job_name` 
數據導出

數據導出(Export)是 Doris 提供的一種將數據導出的功能。該功能可以將用戶指定的表或分區的數據,以文本的格式,通過 Broker 進程導出到遠端存儲上,如 HDFS / 對象存儲(支持S3協議) 等。原理

用戶提交一個 Export 作業到 FE。FE 的 Export 調度器會通過兩階段來執行一個 Export 作業:PENDING:FE 生成 ExportPendingTask,向 BE 發送 snapshot 命令,對所有涉及到的 Tablet 做一個快照。并生成多個查詢計劃。EXPORTING:FE 生成 ExportExportingTask,開始執行查詢計劃。查詢計劃拆分

Export 作業會生成多個查詢計劃,每個查詢計劃負責掃描一部分 Tablet。每個查詢計劃掃描的 Tablet 個數由 FE 配置參數 export_tablet_num_per_task 指定,默認為 5。即假設一共 100 個 Tablet,則會生成 20 個查詢計劃。用戶也可以在提交作業時,通過作業屬性 tablet_num_per_task 指定這個數值。一個作業的多個查詢計劃順序執行

查詢計劃執行

一個查詢計劃掃描多個分片,將讀取的數據以行的形式組織,每 1024 行為一個 batch,調用 Broker 寫入到遠端存儲上。查詢計劃遇到錯誤會整體自動重試 3 次。如果一個查詢計劃重試 3 次依然失敗,則整個作業失敗。Doris 會首先在指定的遠端存儲的路徑中,建立一個名為 __doris_export_tmp_12345 的臨時目錄(其中 12345 為作業 id)。導出的數據首先會寫入這個臨時目錄。每個查詢計劃會生成一個文件,文件名示例:

export-data-c69fcf2b6db5420f-a96b94c1ff8bccef-1561453713822

其中 c69fcf2b6db5420f-a96b94c1ff8bccef 為查詢計劃的 query id。1561453713822 為文件生成的時間戳。當所有數據都導出后,Doris 會將這些文件 rename 到用戶指定的路徑中

示例:導出到hdfs

EXPORT TABLE test.event_info_log1 -- 庫名.表名to "hdfs://linux01:8020/event_info_log1"  -- 導出到那里去PROPERTIES(    "label" = "event_info_log1",    "column_separator"=",",    "exec_mem_limit"="2147483648",    "timeout" = "3600")WITH BROKER "broker_name"(    "username" = "root",    "password" = "");-- 1.label:本次導出作業的標識。后續可以使用這個標識查看作業狀態。-- 2.column_separator:列分隔符。默認為 \t。支持不可見字符,比如 "\x07"。-- 3.columns:要導出的列,使用英文狀態逗號隔開,如果不填這個參數默認是導出表的所有列。-- 4.line_delimiter:行分隔符。默認為 \n。支持不可見字符,比如 "\x07"。-- 5.exec_mem_limit: 表示 Export 作業中,一個查詢計劃在單個 BE 上的內存使用限制。默認 2GB。單位字節。-- 6.timeout:作業超時時間。默認 2小時。單位秒。-- 7.tablet_num_per_task:每個查詢計劃分配的最大分片數。默認為 5。-- 查看導出狀態show EXPORT \G;

注意事項

不建議一次性導出大量數據。一個 Export 作業建議的導出數據量最大在幾十 GB。過大的導出會導致更多的垃圾文件和更高的重試成本。如果表數據量過大,建議按照分區導出。在 Export 作業運行過程中,如果 FE 發生重啟或切主,則 Export 作業會失敗,需要用戶重新提交。如果 Export 作業運行失敗,在遠端存儲中產生的 __doris_export_tmp_xxx 臨時目錄,以及已經生成的文件不會被刪除,需要用戶手動刪除。如果 Export 作業運行成功,在遠端存儲中產生的 __doris_export_tmp_xxx 目錄,根據遠端存儲的文件系統語義,可能會保留,也可能會被清除。比如在百度對象存儲(BOS)中,通過 rename 操作將一個目錄中的最后一個文件移走后,該目錄也會被刪除。如果該目錄沒有被清除,用戶可以手動清除當 Export 運行完成后(成功或失?。現E 發生重啟或切主,則 SHOW EXPORT展示的作業的部分信息會丟失,無法查看。Export 作業只會導出 Base 表的數據,不會導出 Rollup Index 的數據。Export 作業會掃描數據,占用 IO 資源,可能會影響系統的查詢延遲查詢結果導出

SELECT INTO OUTFILE 語句可以將查詢結果導出到文件中。目前支持通過 Broker進程, 通過 S3 協議, 或直接通過 HDFS 協議,導出到遠端存儲,如 HDFS,S3,BOS,COS (騰訊云)上。

-- 語法query_stmt  -- 查詢語句INTO OUTFILE "file_path"  --導出文件的路勁[format_as]  -- 指定文件存儲的格式[properties]  -- 一些配置文件

file_path:指向文件存儲的路徑以及文件前綴。如 hdfs://path/to/my_file_.最終的文件名將由 my_file_,文件序號以及文件格式后綴組成。其中文件序號由 0 開始,數量為文件被分割的數量

-- 如my_file_abcdefg_0.csv my_file_abcdefg_1.csv my_file_abcdegf_2.csv -- [format_as]:指定導出格式。默認為 CSV-- [properties]:指定相關屬性。目前支持通過 Broker 進程,hdfs協議等-- Broker 相關屬性需加前綴 broker.-- HDFS 相關屬性需加前綴 hdfs. 其中hdfs.fs.defaultFS 用于填寫 namenode地址和端口,屬于必填項。-- 如:("broker.prop_key" = "broker.prop_val", ...)("hdfs.fs.defaultFS" = "xxx", "hdfs.hdfs_user" = "xxx")-- 其他屬性:-- column_separator:列分隔符,僅對 CSV 格式適用。默認為 \t。 -- line_delimiter:行分隔符,僅對 CSV 格式適用。默認為 \n。 -- max_file_size:單個文件的最大大小。默認為 1GB。取值范圍在 5MB 到 2GB 之間。超過這個大小的文件將會被切分。-- schema:PARQUET 文件 schema 信息。僅對 PARQUET 格式適用。導出文件格式為 PARQUET 時,必須指定 schema。

使用 broker 方式,將簡單查詢結果導出

select * from log_detail where id >2INTO OUTFILE "hdfs://doitedu01:8020/doris-out/broker_a_" FORMAT AS CSV PROPERTIES ( "broker.name" = "broker_name", "column_separator" = ",", "line_delimiter" = "\n", "max_file_size" = "100MB" ); 

使用 HDFS 方式導出

EXPLAIN SELECT * FROM log_detailINTO OUTFILE "hdfs://doris-out/hdfs_" FORMAT AS CSV PROPERTIES ( "fs.defaultFS" = "hdfs://doitedu01:8020", "hadoop.username" = "root","column_separator" = ",");

標簽:

精彩文檔:
主站蜘蛛池模板: 欧美亚洲日本黄色| 欧美激情综合色| 欧美综合激情| 国产精品入口免费视| 亚洲va国产va天堂va久久| 国产尤物91| 久久久久天天天天| 日韩a∨精品日韩在线观看| 国产免费亚洲高清| 久99久视频| 久久激情五月丁香伊人| 日本在线视频不卡| 日韩一区av在线| 日韩中文字幕亚洲精品欧美| 91国产美女在线观看| 国产精品欧美风情| 国产欧美精品一区二区三区介绍| 欧美一区少妇| 日韩欧美亚洲区| 亚洲一区二区三区乱码aⅴ| 国产精品大全| 国产a∨精品一区二区三区不卡| 国产精品视频网站在线观看| 国产日韩在线观看av| 国产在线98福利播放视频| 精品少妇在线视频| 久久精品国产v日韩v亚洲| 久久久久国色av免费观看性色| 日本精品一区二区三区高清 久久| 性欧美精品一区二区三区在线播放V| 91精品在线观| 日韩在线中文字幕| 亚洲精品自在在线观看| 91av福利视频| 亚洲国产精品女人| 99精品国产高清在线观看| 美女亚洲精品| 亚洲精品tv久久久久久久久| 久久精品国产69国产精品亚洲| 精品国产aⅴ麻豆| 两个人的视频www国产精品|