當您需要將本地檔案匯入到雲資料庫ClickHouse時,可通過clickhouse-client工具進行資料匯入。本文為您介紹如何使用clickhouse-client工具匯入資料至雲資料庫ClickHouse。
前提條件
已安裝大於等於叢集版本的clickhouse-client工具。如何安裝,請參見安裝clickhouse-client。
說明外網匯入資料速度較慢,如果資料量較大或者測試匯入效能,建議您使用內網匯入。
使用內網匯入資料的前提條件是,將clickhouse-client工具安裝在與雲資料庫ClickHouse叢集在同一個VPC網路的ECS執行個體上,串連叢集時,使用VPC地址串連。
ECS執行個體安裝clickhouse-client工具時,需訪問公網。
未購買ECS執行個體:建議購買執行個體時,勾選公網 IP參數。如何購買ECS,請參見自訂購買執行個體。
已購買ECS執行個體,但未開啟公網:為其綁定EIP,具體操作,請參見將EIP綁定至ECS執行個體。
已將安裝clickhouse-client伺服器的IP地址添加到雲資料庫ClickHouse的白名單中。如何添加白名單,請參見設定白名單。
目標檔案屬於可匯入的檔案格式。有關支援匯入的常見檔案格式及其文本要求,請參見支援匯入的檔案格式。
操作步驟
本樣本為將CSV類型的檔案匯入到雲資料庫ClickHouse資料庫default庫中的test_tbl_distributed分布式表中。在實際使用中,請根據您的實際情況修改對應參數。樣本環境如下:
目標庫:default
目標表:test_tbl_distributed
來源資料:testData.csv檔案
步驟一:準備匯入資料
在clickhouse-client用戶端的安裝目錄下,建立名為testData.csv的檔案,並寫入以下資料。
1,yang,32,shanghai,http://example.com
2,wang,22,beijing,http://example.com
3,xiao,23,shenzhen,http://example.com
4,jess,45,hangzhou,http://example.com
5,jack,14,shanghai,http://example.com
6,tomy,25,hangzhou,http://example.com
7,lucy,45,shanghai,http://example.com
8,tengyin,26,shanghai,http://example.com
9,wangli,27,shenzhen,http://example.com
10,xiaohua,37,shanghai,http://example.com步驟二:建表
串連資料庫。
雲資料庫ClickHouse整合了視覺化檢視DMS,能夠便捷的串連叢集,如何使用DMS串連叢集,請參見通過DMS串連ClickHouse。
如果您使用的是其他用戶端,請參見串連資料庫。
根據叢集版本建表。
重要需注意表欄位、欄位類型與文本列及其類型之間的對應關係。表欄位的列順序與類型應與實際文本資料的順序、類型逐一對應。否則,可能會導致匯入資料時出現錯誤。
企業版叢集僅需建立本地表,社區相容版叢集則可能需要根據您的環境和需求建立分布式表。以下為樣本語句,更多建表文法,請參見CREATE TABLE。
企業版
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id;如果您執行此語句時報
ON CLUSTER is not allowed for Replicated database的錯誤提示,可嘗試通過升級版本解決此問題,如何升級版本,請參見升級核心小版本。社區相容版
單副本和雙副本的引擎有所不同,請根據您的副本類型選擇相應的引擎。
重要在雙複本集群中建表時,必須使用MergeTree系列引擎中支援資料複製的Replicated系列引擎。如果您在雙複本集群中,建立了非Replicated系列引擎的表,將導致副本之間無法進行資料複製,從而導致副本資料可能不一致。
單副本
建立本地表。
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id;(可選)建立分布式表。
如果您只需將檔案匯入至本地表中,可跳過此步驟。
如果您的叢集為多節點叢集,建議您建立分布式表。
CREATE TABLE test_tbl_distributed ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, test_tbl_local, rand());
雙副本
建立本地表。
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}') order by id;(可選)建立分布式表。
如果您只需將檔案匯入至本地表中,可跳過此步驟。
如果您的叢集為多節點叢集,建議您建立分布式表。
CREATE TABLE test_tbl_distributed ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, test_tbl_local, rand());
步驟三:匯入資料
在clickhouse-client用戶端的安裝目錄下執行如下命令。
如果您想加快匯入速度,可以將原始檔案等分為多份,啟動多個用戶端進程,並發匯入。
如果您的叢集是多節點叢集,建議將資料匯入至分布式表中。
cat <file_name> | ./clickhouse-client --host=<host> --port=<port> --user=<user> --password=<password> --query="INSERT INTO <table_name> FORMAT <file_type>";參數 | 說明 |
file_name | 目標檔案路徑。 |
host | 外網地址或VPC地址。您可以在叢集資訊頁面,查看叢集外網地址或VPC地址。 建議您根據clickhouse-client所在的伺服器,選擇合理的串連網路:
如何為叢集申請外網,請參見申請和釋放外網地址。 |
port | TCP連接埠號碼。您可以在叢集資訊頁面,查看TCP連接埠號碼。 |
user | 資料庫帳號。 |
password | 資料庫帳號的密碼。 |
table_name | 目標表名。如果您建立了分布式表,此處為分布式表名。 |
file_type | 來源資料檔案類型。 |
步驟四:查看匯入結果
串連叢集。
通過DMS串連叢集,請參見通過DMS串連ClickHouse。
執行查詢語句。
重要如果您是社區版叢集,並且是多節點叢集,建議您查詢分布式表;若未查詢分布式表,則只能擷取叢集中一個節點的資料,這可能會導致查詢結果少於您匯入的資料。
SELECT * FROM test_tbl_local;查詢結果如下。
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | yang | 32 | shanghai | http://example.com | | 2 | wang | 22 | beijing | http://example.com | | 3 | xiao | 23 | shenzhen | http://example.com | | 4 | jess | 45 | hangzhou | http://example.com | | 5 | jack | 14 | shanghai | http://example.com | | 6 | tomy | 25 | hangzhou | http://example.com | | 7 | lucy | 45 | shanghai | http://example.com | | 8 | tengyin | 26 | shanghai | http://example.com | | 9 | wangli | 27 | shenzhen | http://example.com | | 10 | xiaohua | 37 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+
支援匯入的檔案格式
支援匯入的常見檔案格式如下。
文本中,每行資料對應表中一條資料,每列資料對應建立表時的一個欄位。
下述檔案中,即使有的檔案第一列或第二列有對列名或列類型描述,但這些內容都不會被解析,被解析的只有真正需要入表的資料。因此,此處列名和資料類型,並不能決定資料將來入表列的位置以及資料類型。
檔案格式 | 文本要求 | 樣本 |
TabSeparated |
| |
TabSeparatedWithNames | 與TabSeparated類似,區別在於此文本要求第一行是列名。解析文本時,第一行會被忽略。 | |
TabSeparatedWithNamesAndTypes | 與TabSeparated類似,區別是第一行是列名,第二行是類型。解析文本時,第一行、第二行都會被忽略。 | |
CSV |
| |
CSVWithNames | 與CSV類似,區別在於第一行表示列名。解析文本時,第一行會被忽略。 | |
更多檔案格式,請參見檔案格式及說明。
相關文檔
更多遷移方案,請參見資料移轉同步。