このトピックでは、COPY コマンドを使用してローカルデータを Hologres にインポートする方法、または Hologres からローカルファイルにデータをエクスポートする方法について説明します。
制限事項
COPY コマンドを使用する場合、次の制限が適用されます。
-
COPY コマンドは、Hologres エンジンと同じデータの型をサポートしています。詳細については、「データの型」をご参照ください。
-
Hologres は、パーティションテーブルの子テーブルへのデータインポートをサポートしていますが、親テーブルへのインポートはサポートしていません。
-
Hologres は、データをインポートするための
COPY FROM STDINコマンドと、データをエクスポートするためのCOPY ( query ) TO STDOUTコマンドのみをサポートしています。 -
Hologres v1.1.43 以降では、COPY FROM STDIN を使用する際に、テーブルに DEFAULT キーワードまたはシリアル型のフィールドを含めることができます。この機能は、以前のバージョンではサポートされていません。
-
テーブルの 1 つの列にのみデータをインポートすることはできません。
COPY コマンドの詳細については、「COPY コマンド」をご参照ください。
アクセス方法
このトピックで説明するコマンドは、psql クライアントで実行できます。詳細については、「psql クライアント」をご参照ください。
コマンド構文
クライアントの標準入力から Hologres にデータをインポートするには COPY FROM コマンドを使用し、Hologres からローカルファイルにデータをエクスポートするには COPY TO コマンドを使用します。
Hologres は、次の COPY 文の構文をサポートしています。
COPY table_name [ ( column_name [, ...] ) ]
FROM STDIN
[ [ WITH ] ( option [, ...] ) ]
COPY { ( query ) }
TO STDOUT
[ [ WITH ] ( option [, ...] ) ]
where option can be one of:
FORMAT format_name
DELIMITER 'delimiter_character'
NULL 'null_string'
HEADER [ boolean ]
QUOTE 'quote_character'
ESCAPE 'escape_character'
FORCE_QUOTE { ( column_name [, ...] ) | * }
FORCE_NOT_NULL ( column_name [, ...] )
ENCODING 'encoding_name'
パラメーターの説明
次の表にパラメーターを示します。
|
パラメーター |
説明 |
|
table_name |
データを受け取る Hologres テーブルの名前。 |
|
query |
クエリ文。 |
|
STDIN |
クライアントからの標準入力を指定します。 |
|
STDOUT |
指定されたクライアントにデータをエクスポートします。 |
|
FORMAT |
TEXT、CSV、BINARY フォーマットをサポートしています。 デフォルトは TEXT です。BINARY フォーマットは、データのエクスポートと FIXED COPY モードのデータインポートでのみサポートされます。 |
|
DELIMITER |
フィールド区切り文字を指定します。 TEXT フォーマットのデフォルトはタブ文字です。CSV フォーマットのデフォルトはカンマ (,) です。例: |
|
NULL |
NULL 値を表す文字列を指定します。
|
|
HEADER |
ファイルに列名を含むヘッダー行が含まれていることを指定します。 説明
このオプションは CSV フォーマットでのみサポートされます。 |
|
QUOTE |
データ値を囲む引用符を指定します。1 バイト文字である必要があります。 説明
このオプションは CSV フォーマットでのみサポートされます。デフォルトは二重引用符です。 |
|
ESCAPE |
説明
このオプションは CSV フォーマットでのみサポートされます。デフォルトでは |
|
FORCE_QUOTE |
指定された列のすべての値 (NULL を除く) を強制的に引用符で囲みます。 説明
このオプションは、CSV フォーマットで |
|
FORCE_NOT_NULL |
指定された列の値が空文字列と一致するのを防ぎます。空の値は NULL ではなく、長さゼロの文字列として読み取られます。 説明
このオプションは、CSV フォーマットで |
|
ENCODING |
ファイルのエンコーディングを encoding_name として指定します。デフォルトでは、現在のクライアントエンコーディングが使用されます。 |
例
-
COPY コマンドを使用したローカルデータのインポート
-
STDIN を使用して Hologres にデータをインポートするには、次のコマンドを実行します。
-- Hologres テーブルを作成します。 CREATE TABLE copy_test ( id int, age int, name text ) ; -- Hologres テーブルにデータをインポートします。 COPY copy_test FROM STDIN WITH DELIMITER AS ',' NULL AS ''; 53444,24,wangming 55444,38,ligang 55444,38,luyong \. -- テーブル内のデータをクエリします。 SELECT * FROM copy_test;説明psql クライアントは STDIN を使用したデータインポートをサポートしています。DataStudio と HoloWeb は現在、コマンドラインからのデータインポートをサポートしていません。
-
STDIN を使用して CSV ファイルを Hologres にインポートします。
-- Hologres テーブルを作成します。 CREATE TABLE partsupp ( ps_partkey integer not null, ps_suppkey integer not null, ps_availqty integer not null, ps_supplycost float not null, ps_comment text not null ); -- CSV ファイルを Hologres テーブルにインポートします。 COPY partsupp FROM STDIN WITH DELIMITER '|' CSV; 1|2|3325|771.64|final theodolites 1|25002|8076|993.49|ven ideas \. -- テーブル内のデータをクエリします。 SELECT * FROM partsupp;説明psql クライアントは STDIN を使用したデータインポートをサポートしています。DataStudio と HoloWeb は現在、コマンドラインから STDIN を使用して CSV ファイルをインポートすることをサポートしていません。
-
ローカルファイルを Hologres にインポートするには、次のコマンドを実行します。
psql -U <username> -p <port> -h <endpoint> -d <databasename> -c "COPY <table> from stdin with delimiter '|' csv;" <<filename>;説明psql クライアントは、STDIN を使用したデータのインポートをサポートしています。DataStudio および HoloWeb は、現在、コマンドラインでの STDIN からのローカルファイルのインポートをサポートしていません。psql クライアントは STDIN (標準入力) からのみデータのインポートをサポートしているため、ファイルデータを標準入力フォーマットに変換する必要があります。
パラメーターの説明:
パラメーター
説明
username
Alibaba Cloud アカウント:ご利用の Alibaba Cloud アカウントの AccessKey ID です。AccessKey ページから AccessKey ID を取得できます。
漏洩リスクを低減するため、環境変数を設定し、環境変数から AccessKey ID と AccessKey Secret を取得することを推奨します。
カスタムアカウント:カスタムアカウントのユーザー名です。例:BASIC$abc。
port
Hologres インスタンスのパブリックポート番号。
例:
80。endpoint
Hologres インスタンスのパブリックエンドポイント。
例:
xxx-cn-hangzhou.hologres.aliyuncs.com。databasename
Hologres データベースの名前。
詳細については、「データベースの作成」をご参照ください。
例:
mydb。table
データをインポートする Hologres テーブルの名前。
filename
Hologres にインポートするローカルファイルのパス。
例:
D:\tmp\copy_test.csv。次の例は、ターミナルでコマンドを実行してローカルファイルを Hologres にインポートする方法を示しています。
-
コマンドを実行して、ローカルファイル copy_test を Hologres にインポートします。

標準入力ファイルには、次のデータが含まれています。
01,01,name1 02,01,name2 03,01,name3 04,01,name4 -
コマンドの実行後、次の図に示すように、psql クライアントで新しく挿入されたデータをクエリできます。

-
-
COPY コマンドを使用したローカルファイルへのデータエクスポート
-
\copyを使用して、Hologres データをローカルファイルにエクスポートできます。説明この方法は psql クライアントでのみサポートされます。
-- テーブルを作成 CREATE TABLE copy_to_local ( id int, age int, name text ) ; -- データを挿入 INSERT INTO copy_to_local VALUES (1,1,'a'), (1,2,'b'), (1,3,'c'), (1,4,'d'); -- データをクエリ select * from copy_to_local; -- ローカルファイルにデータをエクスポート \copy (select * from copy_to_local) to '/root/localfile.txt'; -
Hologres データをローカルファイルにエクスポートします。
説明この方法は psql クライアントでのみサポートされます。
psql -U <username> -p <port> -h <endpoint> -d <databasename> -c "COPY (select * from <tablename>) to stdout with delimiter '|' csv;" ><filename>;
-
-
CopyManager を使用したインポートとエクスポート
-
CopyManager を使用して JDBC クライアントから Hologres にファイルをインポートするには、次のコマンドを実行します。
package com.aliyun.hologram.test.jdbc; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.*; import java.util.Properties; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class jdbcCopyFile { public static void main(String args[]) throws Exception { System.out.println(copyFromFile(getConnection(), "/Users/user/Workspace/region.tbl", "region")); } public static Connection getConnection() throws Exception { Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://endpoint:port/dbname"; Properties props = new Properties(); // DB ユーザーを設定 props.setProperty("user", "******");// 現在のアカウントの AccessKey ID。パスワード漏洩のリスクを低減するため、環境変数の使用を推奨します。 // DB パスワードを設定 props.setProperty("password", "******");// 現在のアカウントの AccessKey Secret。パスワード漏洩のリスクを低減するため、環境変数の使用を推奨します。 return DriverManager.getConnection(url, props); } /** * ファイルをデータベースにインポートします。 * * @param connection * @param filePath * @param tableName * @return * @throws SQLException * @throws IOException */ public static long copyFromFile(Connection connection, String filePath, String tableName) throws SQLException, IOException { long count = 0; FileInputStream fileInputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection) connection); fileInputStream = new FileInputStream(filePath); count = copyManager.copyIn("COPY " + tableName + " FROM STDIN delimiter '|' csv", fileInputStream); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return count; } } -
CopyManager を使用して Hologres データを JDBC クライアント上のファイルにエクスポートするには、次のコマンドを実行します。
import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class copy_to_local_file { public static void main(String args[]) throws Exception { System.out.println(copyToFile(getConnection(), "/Users/user/Workspace/region.tbl", "select * from region")); } public static Connection getConnection() throws Exception { Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://endpoint:port/dbname"; Properties props = new Properties(); // DB ユーザーを設定 props.setProperty("user", "******");// 現在のアカウントの AccessKey ID。パスワード漏洩のリスクを低減するため、環境変数の使用を推奨します。 // DB パスワードを設定 props.setProperty("password", "******");// 現在のアカウントの AccessKey Secret。パスワード漏洩のリスクを低減するため、環境変数の使用を推奨します。 return DriverManager.getConnection(url, props); } /** * データベースのデータをクライアントファイルにエクスポートします。 * * @param connection * @param filePath * @param SQL_Query * @return * @throws SQLException * @throws IOException */ public static String copyToFile(Connection connection, String filePath, String SQL_Query) throws SQLException, IOException { FileOutputStream fileOutputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileOutputStream = new FileOutputStream(filePath); copyManager.copyOut("COPY " + "(" + SQL_Query + ")" + " TO STDOUT DELIMITER '|' csv ", fileOutputStream); } finally { if (fileOutputStream != null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return filePath; } }
-
HoloWeb ビジュアルワンクリックインポート
HoloWeb は、ローカルファイルのビジュアルワンクリックアップロードをサポートしています。次の手順に従ってください。
-
HoloWeb 開発者ページに移動します。詳細については、「HoloWeb への接続とクエリの実行」をご参照ください。
-
HoloWeb 開発ページの上部のメニューバーで、Data Solutions をクリックします。
-
左側のナビゲーションウィンドウで、Import On-premises File > New Data Import を選択します。
-
Import On-premises File ダイアログボックスの Select Destination Table ページで、パラメーターを設定します。

パラメーター
説明
ジョブ名
新しいジョブの名前。
インスタンス名
ログインしているインスタンスの名前を選択します。
ターゲットデータベース
対応する Hologres インスタンスで作成されたデータベースの名前。
ターゲットスキーマ
Hologres で作成されたスキーマの名前。
スキーマを作成していない場合は、デフォルトの public スキーマのみ選択できます。スキーマを作成している場合は、カスタムスキーマも選択できます。
インポートするデータテーブルの選択
ローカルファイルを格納するテーブルの名前。
ローカルファイルをインポートする前に、ターゲットデータベースにファイルを格納するためのテーブルを作成してください。
-
Next をクリックし、Upload File ページでパラメーターを設定します。
パラメーター
説明
ファイルの選択
アップロードするローカルファイル。
TXT、CSV、LOG ファイルのみがサポートされています。
説明データファイル内の列の順序は、テーブルで定義されている列の順序と一致する必要があり、列の数も同じである必要があります。
区切り文字の選択
-
Comma
-
タブ
-
Semicolon
-
Space
-
|
-
#
-
&
カスタム区切り文字を定義することもできます。
ソース文字セット
-
GBK
-
UTF-8
-
CP936
-
ISO-8859
最初の行をヘッダーとして扱う
最初の行をヘッダーとして扱うには、このオプションを選択します。
-
-
Next をクリックします。Confirm Import Information ページで Upload をクリックして、ローカルファイルのワンクリックインポートを完了します。
Confirm Import Information ページでは、ターゲットスキーマ、データベース、テーブルなど、データインポートに関する詳細を表示できます。