waterdrop匯出hdfs資料到clickhouse(text,csv,json)
首先用hive建立表(這裡是為了生成hdfs檔案方便,實際hive表匯出應該是整合spark直接寫sql匯出):
CREATE TABLE test.hdfs2ch2(
id int,
name string,
create_time timestamp);
insert into hdfs2ch2 values(1,'zhangsan',' 2020-01-01 01:01:01.000001');
insert into hdfs2ch2 values(2,'lisi','2020-01-01 01:01:01.000002');
至於為什麼要用’2020-01-01 01:01:01.000002’這種格式的資料,是為了多演示這種比較偏的型別.
clickhosue建立表語句:
CREATE TABLE mydatabase.hdfs2ch2
(
`id` Int64,
`name` String,
`create_time` DateTime
)
ENGINE = MergeTree()
ORDER BY id
SETTINGS index_granularity = 8192
下面上waterdrop指令碼:
spark {
#程式名稱
spark.app.name = "Waterdrop"
#executor的數量(資料量大可以適當增大)
spark.executor.instances = 1
#每個excutor核數(並行度,資料量大可以適當增大到伺服器核數一半以下,儘量不要影響clickhouse)
spark.executor.cores = 1
#每個excutor記憶體(不能小於512m)
spark.executor.memory = "1g"
}
input {
hdfs {
result_table_name = "test_source"
#hive建立表的hdfs路徑
path = "hdfs://node01:8020/user/hive/warehouse/test.db/hdfs2ch2"
format="text"
}
}
filter {
split {
#根據分隔符切割後給每個列的名字
fields = ["id", "name","create_time"]
#這裡指的是hive的欄位分隔符,不然無法切割
delimiter = "\\001"
}
convert {
#因為剛切割後所有欄位型別為string,如果不轉化就會報錯
#可以轉化的型別string、integer、long、float、double和boolean
source_field = "id"
new_type = "long"
}
date {
#指定要進行轉換的原欄位名
source_field = "create_time"
#指定轉化結束後的欄位名(必須指定)
target_field = "create_time"
#大S就是毫秒的表示,如果表示錯誤,會轉化失敗,轉化失敗就會生成當前時間
source_time_format = "yyyy-MM-dd HH:mm:ss.SSSSSS"
target_time_format = "yyyy-MM-dd HH:mm:ss"
}
}
output {
stdout{
limit=2
}
clickhouse {
host = "node01:8123"
clickhouse.socket_timeout = 50000
database = "mydatabase"
table = "hdfs2ch2"
fields = ["id","name","create_time"]
username = ""
password = ""
bulk_size = 20000
}
}
執行:
./bin/start-waterdrop.sh --master yarn --deploy-mode client --config ./config/hdfs-clickhouse2.conf
檢視資料:
node01.hadoop.com ? select * from hdfs2ch2;
SELECT *
FROM hdfs2ch2
┌─id─┬─name─────┬─────────create_time─┐
│ 1 │ zhangsan │ 2020-01-01 01:01:01 │
└────┴──────────┴─────────────────────┘
┌─id─┬─name─┬─────────create_time─┐
│ 2 │ lisi │ 2020-01-01 01:01:01 │
└────┴──────┴─────────────────────┘
2 rows in set. Elapsed: 0.009 sec.
CSV
如果是csv格式,表頭不是欄位名的話,就使用上面方式匯入,只是input裡面 delimiter = ","其他的一樣,但是如果表頭是欄位名的話:
input {
hdfs {
result_table_name = "test_source"
path = "hdfs://node01:8020/user/hive/warehouse/test.db/hdfs2ch3"
format="csv"
#此處註明表頭是欄位名
options.header = "true"
}
}
這樣子的話不要filter中的split標籤進行切分新增欄位名字了,但是每個欄位還是string型別,與clickhouse型別不一樣的還是要轉換.
完整的csv示例:
spark {
#程式名稱
spark.app.name = "Waterdrop"
#executor的數量(資料量大可以適當增大)
spark.executor.instances = 1
#每個excutor核數(並行度,資料量大可以適當增大到伺服器核數一半以下,儘量不要影響clickhouse)
spark.executor.cores = 1
#每個excutor記憶體(不能小於512m)
spark.executor.memory = "1g"
}
input {
hdfs {
result_table_name = "test_source"
path = "hdfs://node01:8020/user/hive/warehouse/test.db/hdfs2ch3"
format="csv"
options.header = "true"
}
}
filter {
convert {
source_field = "id"
new_type = "integer"
}
convert {
source_field = "age"
new_type = "integer"
}
#date {
# source_field = "create_time"
# target_field = "create_time"
# source_time_format = "yyyy-MM-dd HH:mm:ss.SSSSSS"
# target_time_format = "yyyy-MM-dd HH:mm:ss"
#}
}
output {
stdout{
limit=2
}
clickhouse {
host = "node01:8123"
clickhouse.socket_timeout = 50000
database = "mydatabase"
table = "hdfs2ch3"
fields = ["id","name","age"]
username = ""
password = ""
bulk_size = 20000
}
}
JSON
如果是json格式資料,跟csv一樣,只是json帶有一定格式,數字格式為long型別.
spark {
#程式名稱
spark.app.name = "Waterdrop"
#executor的數量(資料量大可以適當增大)
spark.executor.instances = 1
#每個excutor核數(並行度,資料量大可以適當增大到伺服器核數一半以下,儘量不要影響clickhouse)
spark.executor.cores = 1
#每個excutor記憶體(不能小於512m)
spark.executor.memory = "1g"
}
input {
hdfs {
result_table_name = "test_source"
path = "hdfs://node01:8020/user/hive/warehouse/test.db/hdfs2ch4"
format="json"
}
}
filter {
convert {
source_field = "id"
new_type = "integer"
}
convert {
source_field = "age"
new_type = "integer"
}
#date {
# source_field = "create_time"
# target_field = "create_time"
# source_time_format = "yyyy-MM-dd HH:mm:ss.SSSSSS"
# target_time_format = "yyyy-MM-dd HH:mm:ss"
#}
}
output {
stdout{
limit=2
}
clickhouse {
host = "node01:8123"
clickhouse.socket_timeout = 50000
database = "mydatabase"
table = "hdfs2ch3"
fields = ["id","name","age"]
username = ""
password = ""
bulk_size = 20000
}
}
相關文章
- Sqoop匯出ClickHouse資料到HiveOOPHive
- 利用跳板機連線mysql,匯出資料到csvMySql
- tsdump-用於匯出資料庫表結構的工具(支援匯出為text、markdown、csv、json)資料庫JSON
- 如何將 JSON, Text, XML, CSV 資料檔案匯入 MySQLJSONXMLMySql
- vue element ui excel json2csv csv 匯出VueUIExcelJSON
- SQLServer匯出匯入資料到MySQLServerMySql
- 利用NPOI匯出資料到Execl
- mysql匯入匯出.csv格式資料MySql
- 匯出資料為csv格式
- ClickHouse 資料表匯出和匯入(qbit)
- JavaScript 匯出csvJavaScript
- PHP匯出大量資料到excel表格PHPExcel
- php匯出csv格式PHP
- nodejs 匯出csvNodeJS
- Vue匯出資料到Excel電子表格VueExcel
- 【Mysql】匯出資料到excel檔案中MySqlExcel
- csv/json/list/datatable匯出為excel的通用模組設計JSONExcel
- PHP 匯出大資料 CSV 檔案PHP大資料
- MySQL匯出資料為csv的方法MySql
- 從CSV檔案匯入資料到Analytics Cloud裡建立模型和StoryCloud模型
- 使用Flume消費Kafka資料到HDFSKafka
- hadoop之上傳資料到hdfs模式Hadoop模式
- 用DataX導資料到Clickhouse遇到的坑
- java匯出CSV檔案Java
- 使用csv批量匯入、匯出資料的需求處理
- MySQL 匯出資料為csv格式的方法MySql
- clickhouse表結構匯出為
- 用 PostgreSQL 的 COPY 匯入匯出 CSVSQL
- Flink同步Kafka資料到ClickHouse分散式表Kafka分散式
- C#快速匯出百萬級資料到Excel方法C#Excel
- SQL通過bcp匯出資料到excel檔案SQLExcel
- 用Perl從oracle匯出百萬級資料到excelOracleExcel
- 資料庫SQL Server DAC 匯入匯出資料到SQL Azure問題資料庫SQLServer
- PHP 匯出 CSV 格式檔案PHP
- oralce 匯出csv格式檔案
- magento2 後臺資料展示+csv匯出
- Laravel-admin 自定義csv匯出,支援原有匯出csv的所有功能,匯出所有資料使用分頁查詢處理Laravel
- ClickHouse-整合引擎(MySQL、HDFS)MySql