すべてのプロダクト
Search
ドキュメントセンター

Hologres:オンプレミスファイルへのデータのエクスポート

最終更新日:Apr 25, 2025

このトピックでは、COPY 文を使用してオンプレミスデータを Hologres にインポートする方法、または Hologres データをオンプレミスファイルにエクスポートする方法について説明します。

制限

COPY 文を使用してデータをインポートまたはエクスポートする場合は、次の点に注意してください。

  • COPY 文は、Hologres でサポートされているデータ型をサポートしています。 詳細については、「データ型」をご参照ください。

  • COPY 文を使用してパーティションテーブルから Hologres にデータをインポートする場合、親パーティションテーブルではなく子パーティションテーブルにのみデータをインポートできます。

  • Hologres にデータをインポートするには、COPY FROM STDIN 文を実行する必要があります。 Hologres からデータをエクスポートするには、COPY ( query ) TO STDOUT 文を実行する必要があります。

  • Hologres V1.1.43 以降では、COPY FROM STDIN 文は、DEFAULT 制約で作成されたテーブルと、SERIAL データ型の列を含むテーブルをサポートしています。 COPY FROM STDIN 文は、以前のバージョンの Hologres ではこれらのテーブルをサポートしていません。

  • テーブルの 1 つの列にのみデータをインポートすることはできません。

COPY 文の詳細については、「COPY」をご参照ください。

操作プラットフォーム

このトピックで説明されている文は、PostgreSQL クライアントで実行する必要があります。 詳細については、「PostgreSQL クライアント」をご参照ください。

構文

COPY FROM 文を使用して、クライアントの stdin から Hologres にデータをインポートし、COPY TO 文を使用して、Hologres データをクライアントにエクスポートできます。

構文:

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

指定されたクライアントの stdin からデータをインポートします。

STDOUT

指定されたクライアントにデータをエクスポートします。

FORMAT

有効な値:TEXT、CSV、BINARY。

デフォルト値:TEXT。BINARY データ型のデータをエクスポートできます。固定コピーモードでのみ、BINARY データ型のデータをインポートできます。

DELIMITER

列を区切るために使用するデリミタ。

デフォルトのデリミタは、テキスト形式ではタブ文字、CSV 形式ではカンマ (,) です。例:DELIMITER AS ','

NULL

NULL 値を表すために使用する文字列。

  • TEXT データ型:デフォルト値は \N です。

  • CSV 形式:デフォルト値は、引用符で囲まれていない空の文字列です。

  • BINARY データ型:このパラメーターはサポートされていません。

HEADER

ファイルにヘッダー行が含まれているかどうかを指定します。ヘッダー行の値は、ファイル内の列名です。

説明

このパラメーターは、CSV 形式のデータに対してのみ有効です。

QUOTE

データ値を参照するために使用される 1 バイト文字。

説明

このパラメーターは、CSV 形式のデータに対してのみ有効です。デフォルトでは、二重引用符 (") が使用されます。

ESCAPE

QUOTE パラメーターの値と一致する文字の前に表示される 1 バイト文字。

説明

このパラメーターは、CSV 形式のデータに対してのみ有効です。デフォルトでは、値は QUOTE パラメーターの値と同じです。

FORCE_QUOTE

指定された列のすべての非 NULL 値に引用符 (') を強制的に使用します。

説明

このパラメーターは、COPY TO 文のファイルが CSV 形式を使用している場合にのみ有効です。

FORCE_NOT_NULL

指定された列では、NULL 値を表す文字列は一致しません。代わりに、NULL 値は長さゼロの文字列として読み取られます。

説明

このパラメーターは、COPY FROM 文のファイルが CSV 形式を使用している場合にのみ有効です。

ENCODING

ファイルに使用するエンコード方式。デフォルトでは、クライアントのエンコード方式が使用されます。

  • 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
      \.
      
      -- Hologres テーブルのデータをクエリします。
      SELECT * FROM copy_test;
      説明

      PostgreSQL クライアントでは、stdin からデータをインポートできます。DataStudio と HoloWeb では、コマンドラインを使用して stdin から Hologres にデータをインポートすることはできません。

    • 次の文を実行して、stdin から Hologres に CSV ファイルをインポートします。

      -- 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 );
      
      -- 作成した Hologres テーブルに CSV ファイルをインポートします。
      COPY partsupp FROM STDIN WITH DELIMITER '|' CSV;  
      1|2|3325|771.64|final theodolites 
      1|25002|8076|993.49|ven ideas
      \.
      
      -- Hologres テーブルのデータをクエリします。
      SELECT * FROM partsupp;
      説明

      PostgreSQL クライアントでは、stdin からデータをインポートできます。DataStudio と HoloWeb では、コマンドラインを使用して stdin から Hologres に CSV ファイルをインポートすることはできません。

    • 次の文を実行して、オンプレミスファイルを Hologres にインポートします。

      psql -U <username> -p <port> -h <endpoint> -d <databasename> -c "COPY <table> from stdin with delimiter '|' csv;" <<filename>;
      説明

      PostgreSQL クライアントでは、stdin からデータをインポートできます。DataStudio と HoloWeb では、コマンドラインを使用して stdin から Hologres にオンプレミスファイルをインポートすることはできません。PostgreSQL クライアントを使用する場合、stdin からのみデータをインポートできます。したがって、インポートするファイル内のデータの形式を標準入力形式に変換する必要があります。

      次の表は、文のパラメーターについて説明しています。

      パラメーター

      説明

      username

      • Alibaba Cloud アカウント:Alibaba Cloud アカウントの AccessKey ID。AccessKey ページから AccessKey ID を取得できます。

        環境変数を構成し、環境変数から AccessKey ID と AccessKey シークレットを取得することをお勧めします。これは、リークのリスクを軽減するのに役立ちます。

      • カスタムアカウント:カスタムアカウントのユーザー名。例: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

      次の例は、stdin から Hologres にオンプレミスファイルをインポートする文を実行する方法を示しています。

      • 文を実行して、copy_test という名前のオンプレミスファイルを stdin から Hologres にインポートします。11212インポートされた標準ファイルには、次のコンテンツが含まれています。

        01,01,name1
        02,01,name2
        03,01,name3
        04,01,name4
      • 文が実行されたら、PostgreSQL クライアントに戻ります。次に、次の図に示すように、新しくインポートされたデータをクエリできます。查询结果

  • COPY 文を使用してクライアントにデータをエクスポートする

    • \copy 文を実行して、Hologres データをオンプレミスファイルにエクスポートします。

      説明

      このメソッドを使用して、Hologres データを PostgreSQL クライアントのオンプレミスファイルにのみエクスポートできます。

      -- テーブルを作成します。
      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 データをオンプレミスファイルにエクスポートします。

      説明

      このメソッドを使用して、Hologres データを PostgreSQL クライアントのオンプレミスファイルにのみエクスポートできます。

      psql -U <username> -p <port> -h <endpoint> -d <databasename> -c "COPY (select * from <tablename>) to stdout with delimiter '|' csv;" ><filename>;
  • CopyManager を使用してデータをインポートおよびエクスポートする

    • 次の文を実行して、CopyManager を使用して Java Database Connectivity ( 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/feng/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。環境変数を構成し、環境変数から AccessKey ID を取得することをお勧めします。これは、情報漏えいを防ぐのに役立ちます。
          // DB パスワードを設定します
              props.setProperty("password", "******");// 現在のアカウントの AccessKey シークレット。環境変数を構成し、環境変数から AccessKey シークレットを取得することをお勧めします。これは、情報漏えいを防ぐのに役立ちます。
              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/feng/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。環境変数を構成し、環境変数から AccessKey ID を取得することをお勧めします。これは、情報漏えいを防ぐのに役立ちます。
          // DB パスワードを設定します
              props.setProperty("password", "******");// 現在のアカウントの AccessKey シークレット。環境変数を構成し、環境変数から AccessKey シークレットを取得することをお勧めします。これは、情報漏えいを防ぐのに役立ちます。
              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 を使用すると、視覚化された方法で数回クリックするだけで、オンプレミスファイルを Hologres にアップロードできます。

  1. HoloWeb コンソールにログオンします。詳細については、「HoloWeb に接続してクエリを実行する」をご参照ください。

  2. HoloWeb コンソールで、上部のナビゲーションバーの [データソリューション] をクリックします。

  3. 左側のナビゲーションウィンドウで、[オンプレミスファイルのインポート] をクリックします。表示されるページで、[新しいデータインポート] をクリックします。

  4. [オンプレミスファイルのインポート] ダイアログボックスで、[宛先テーブルの選択] ステップのパラメーターを構成します。一键本地文件上传

    パラメーター

    説明

    ジョブ名

    インポートジョブの名前。

    インスタンス名

    接続されているインスタンスの名前。

    宛先データベース

    宛先テーブルが属するデータベースの名前。

    宛先スキーマ

    宛先テーブルが属するスキーマの名前。

    スキーマを作成していない場合は、デフォルトスキーマ [public] を選択します。カスタムスキーマを作成した場合は、作成したスキーマを選択できます。

    宛先テーブル

    オンプレミスファイルのデータをインポートする宛先テーブルの名前。

    オンプレミスファイルからデータをインポートする前に、宛先データベースにテーブルを作成して、オンプレミスファイルのデータを格納する必要があります。

  5. [次へ] をクリックし、[ファイルのアップロード] ステップのパラメーターを構成します。

    パラメーター

    説明

    ファイルの選択

    アップロードするオンプレミスファイル。

    .txt、.csv、.log ファイルのみがサポートされています。

    説明

    オンプレミスファイルと宛先テーブルには、同じ数の列が含まれている必要があります。オンプレミスファイルの列は、宛先テーブルで定義されている列と同じ順序である必要があります。

    デリミタ

    • オンプレミスファイルのフィールドを区切るために使用するデリミタ。有効な値:[カンマ( , )]

    • [タブ]

    • [セミコロン ( ; )]

    • [スペース]

    • [|]

    • [#]

    • [&]

    カスタムデリミタを指定することもできます。

    文字エンコーディング

    • [GBK]

    • [UTF-8]

    • [CP936]

    • [ISO-8859]

    最初の行をヘッダーとして使用

    最初の行をテーブルヘッダーとして使用するかどうかを指定します。

  6. [次へ] をクリックします。[インポートの概要] ステップで、[実行] をクリックしてオンプレミスファイルをインポートします。

    [インポートの概要] ステップでは、オンプレミスファイルのインポート先のスキーマ、データベース、テーブルなどのタスク情報も表示できます。