CREATE EXTERNAL TABLE ステートメントを使用して外部テーブルを作成します。外部テーブルを作成する際には、外部ファイルからデータを読み取るためのデータファイルのパスと形式を指定する必要があります。
権限要件
外部テーブルを作成するには、現在のユーザーが CREATE 権限を持っている必要があります。現在のユーザー権限を確認する操作については、ユーザー権限の確認を参照してください。
外部テーブルの作成
外部テーブルを作成するSQLステートメントは以下のとおりです:
CREATE EXTERNAL TABLE table_name (column_definition_list)
LOCATION = 'file_name'
{FORMAT = (format_type_options)
| PROPERTIES = (properties_type_options)}
[PARTITION BY (column_name [, column_name ...])]
[PARTITION_TYPE = USER_SPECIFIED]
[PATTERN = 'regex_pattern']
[AUTO_REFRESH = 'xxx'];
column_definition_list:
column_definition [, column_definition ...]
column_definition:
column_name column_type [AS metadata$filecol{N} | external$filepos{N}]
format_type_options:
type_csv_option
| type_parquet_option
| type_orc_option
type_csv_option:
TYPE = 'CSV'
LINE_DELIMITER = '<string>' | <expr>
FIELD_DELIMITER = '<string>' | <expr>
ESCAPE = '<character>' | <expr>
FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | <expr>
ENCODING = 'charset'
NULL_IF = ('<string>' | <expr>, '<string>' | <expr> ...)
SKIP_HEADER = <int>
SKIP_BLANK_LINES = {TRUE | FALSE}
TRIM_SPACE = {TRUE | FALSE}
EMPTY_FIELD_AS_NULL = {TRUE | FALSE}
IGNORE_LAST_EMPTY_COLUMN = {TRUE | FALSE}
COMPRESSION = {GZIP | ZSTD | DEFLATE | NONE | SNAPPY_BLOCK}
PARALLEL_PARSE_ON_SINGLE_FILE = {TRUE | FALSE}
PARALLEL_PARSE_FILE_SIZE_THRESHOLD = <int>
MAX_ROW_LENGTH = <int>
type_parquet_option:
TYPE = 'PARQUET'
[COLUMN_INDEX_TYPE = 'POSITION, NAME']
type_orc_option:
TYPE = 'ORC'
[COLUMN_INDEX_TYPE = 'POSITION, NAME']
properties_type_options:
type_odps_option
type_odps_option:
TYPE = 'ODPS'
ACCESSID = '<string>',
ACCESSKEY = '<string>',
ENDPOINT = '<string>',
PROJECT_NAME = '<string>',
SCHEMA_NAME = '<string>',
TABLE_NAME = '<string>',
QUOTA_NAME = '<string>',
COMPRESSION_CODE = '<string>',
API_MODE = {"tunnel_api" | "storage_api"},
SPLIT = {"byte" | "row"}
関連パラメータの説明は以下のとおりです:
col_name col_type [AS (metadata$filecol{N} | external$filepos{N})]:列を定義します。ここで、AS (metadata$filecol{N})は手動で列マッピングを定義するために使用され、AS (external$filepos{N})は位置で列をインデックス付けするために使用されます。外部テーブルでサポートされている列の種類は通常のテーブルと同じです。OceanBaseデータベースのMySQLモードでサポートされているデータ型と詳細については、データ型の概要を参照してください。
デフォルトでは、外部ファイル内のデータ列と外部テーブルで定義された列は自動的に順序付きで対応します。つまり、外部テーブルの1列目は外部ファイルの最初の列のデータに対応します。
例えば、以下の例では、外部テーブル
ext_t1のC1列は外部ファイルの1列目のデータに自動的にマッピングされ、C2列は外部ファイルの2列目のデータに自動的にマッピングされます。CREATE EXTERNAL TABLE ext_t1 ( C1 int, C2 int ) LOCATION = 'oss://$ACCESS_ID:$ACCESS_KEY@$HOST/tpch_1g_data/lineitem/' FORMAT = ( TYPE = 'CSV' FIELD_DELIMITER = '|' );外部ファイル内の列の順序が外部テーブルで定義された列の順序と一致しない場合、以下の2つの方法で列マッピングを指定できます:
metadata$filecol{N}構文の使用:CSV形式に適用され、外部テーブルの列が外部ファイルのN列目に対応するよう指定します。ファイル内の列は1から番号が付けられます。external$filepos{N}構文の使用:ParquetおよびORC形式に適用され、位置で列をインデックス付けします。COLUMN_INDEX_TYPE = 'POSITION'パラメータと併用する必要があります。
例えば、以下の例では、
C1 int AS (metadata$filecol2)は外部テーブルext_t2のC1列がファイルの2列目に対応することを意味し、C2 int AS (metadata$filecol4)は外部テーブルext_t2のC2列が外部ファイルの4列目に対応することを意味します。CREATE EXTERNAL TABLE ext_t2 ( C1 int AS (metadata$filecol2), C2 int AS (metadata$filecol4) ) LOCATION = 'oss://$ACCESS_ID:$ACCESS_KEY@$HOST/tpch_1g_data/lineitem/' FORMAT = ( TYPE = 'CSV' FIELD_DELIMITER = '|' );ParquetおよびORC形式では、
external$filepos{N}構文を使用できます:CREATE EXTERNAL TABLE ext_t3 ( c1 INT AS (external$filepos1), c2 INT AS (external$filepos2), c3 VARCHAR(50) AS (external$filepos3), c4 DATE AS (external$filepos4) ) LOCATION = 'path/to/data/' FORMAT = (TYPE = 'PARQUET' COLUMN_INDEX_TYPE = 'POSITION') PATTERN = "000000_0$";注意
列マッピングを手動で定義する必要がある場合、自動列マッピング機能は無効になり、すべての列を手動でマッピングする必要があります。
注意
external$filepos{N}構文を使用する場合、COLUMN_INDEX_TYPE = 'POSITION'パラメータを設定する必要があります。LOCATION = '<string>':外部ファイルの保存先パスを指定します。通常、外部テーブルのデータファイルは別のディレクトリに保存され、そのフォルダ内にはサブディレクトリを含むことができます。外部テーブルを作成する際、そのディレクトリ内のすべてのファイルが自動的に収集されます。以下の2つの形式をサポートしています:
ローカルLocation形式:
LOCATION = '[file://] local_file_path'local_file_path:相対パスまたは絶対パスのいずれかです。相対パスを指定する場合、現在のディレクトリはOceanBaseデータベースのインストールディレクトリである必要があります。注意
local_file_pathはファイルではなくディレクトリである必要があります。個別のファイルを指定する必要がある場合は、LOCATIONでそのファイルの上位ディレクトリを指定し、PATTERNプロパティを設定してそのファイルを指定する必要があります。ローカルLocation形式を使用するシナリオでは、システム変数
secure_file_privを使用してOceanBaseデータベースがアクセス権を持つファイルパスを設定する際、secure_file_privはlocal_file_pathの上位ディレクトリである必要があります。つまり、local_file_pathはsecure_file_privパスのサブパスにすることができます。システム変数
secure_file_privは、ファイルへのインポートまたはエクスポート時にOceanBaseデータベースがアクセス可能なパスを制御します。secure_file_privの詳細については、secure_file_privを参照してください。
リモートLocation形式:
注意
オブジェクトストレージパスを使用する場合、オブジェクトストレージパスの各パラメータは
&記号で区切られます。入力するパラメータ値には英字の大文字と小文字、数字、/-_$+=およびワイルドカードのみ含まれていることを確認してください。上記以外の文字を入力した場合、設定が失敗する可能性があります。ファイルがOSS/S3上にある場合、形式は次のとおりです:
LOCATION = '{oss\|s3}://$ACCESS_ID:$ACCESS_KEY@$HOST:s3_region/remote_file_path'。ここで、$ACCESS_ID、$ACCESS_KEY、および$HOSTは、Alibaba Cloud OSS、AWS S3、およびS3プロトコル互換のオブジェクトストレージにアクセスするために必要なアクセス情報です。s3_regionはS3使用時に選択するリージョン情報であり、これらの機密アクセス情報は暗号化されてデータベースのシステムテーブルに保存されます。ファイルがHDFS上にある場合、形式は以下のとおりです:
シングルノードNameNode(NN)アドレスに基づいてクラスタにアクセスする形式:
LOCATION = hdfs://localhost:port/PATH。ここで、localhostはHDFSのアドレスを指し、portはHDFSのポート番号を指し、PATHはHDFS内のファイルパスを指します。Kerberos認証を使用する形式:
LOCATION = 'hdfs://localhost:port/user?principal=xxx&keytab=xxx&krb5conf=xxx&configs=xxx'。ここで:principal:ログイン認証ユーザーを指します。keytab:ユーザー認証のキータブファイルのパスを指定します。krb5conf:ユーザーが使用するKerberos環境の設定ファイルのパスを指定します。configs:追加のHDFS構成パラメータを指定します。デフォルトは空ですが、Kerberos環境の場合、このパラメータには通常値が設定され、例えばdfs.data.transfer.protection=authentication,privacyのように設定する必要があります。これは、データ転送の保護レベルをauthenticationとprivacyに設定します。
Hadoop HA(高可用性)の論理名サービスに基づいてクラスタにアクセスする形式:
LOCATION = hdfs://nameserviceID/PATH。ここで、nameserviceIDはHDFSのHadoop HAの論理名サービスIDを指し、PATHはファイルパスを指します。説明
クライアントOBServer側の設定には、HAクラスタの
nameservice定義とフェイルオーバー戦略が含まれていることを確認してください。Kerberos認証を使用する形式:
LOCATION = 'hdfs://nameserviceID/PATH?principal=xxx&keytab=xxx&krb5conf=xxx&configs=dfs.data.transfer.protection=${string}#dfs.nameservices=${nameservice id}#dfs.ha.namenodes.${nameservice id}=${namenode1}, ${namenode2}#dfs.namenode.rpc-address.${nameservice id}.${namenode1}=${namenode 1 address}#dfs.namenode.rpc-address.${nameservice id}.${namenode2}=${namenode 2 address}#dfs.ha.automatic-failover.enabled.${nameservice id}=true#dfs.client.failover.proxy.provider.${nameservice id}=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider'。ここで:principal:ログイン認証ユーザーを指します。非プライマリノードNNのprincipalに設定します。keytabとkrb5conf:シングルノードNNの設定と同じです。configs:追加のHDFS構成パラメータを指定します。複数の構成パラメータを設定する必要があり、HA構成パラメータとセキュリティ構成パラメータにのみ関連します:dfs.data.transfer.protection=${string}:クラスタのdfs.data.transfer.protection設定に合わせます。dfs.nameservices=${nameservice id}:現在のHAクラスタのnamesevice(エイリアス)を指定します。dfs.ha.namenodes.${nameservice id}=${namenode1}, ${namenode2}:HAクラスタのnamenodeバックアップIDリストを指定します。dfs.namenode.rpc-address.${nameservice id}.${namenode1}=${namenode 1 address}:namenode1が具体的なnamenodeであることを設定し、クライアントのルーティングを容易にします。dfs.namenode.rpc-address.${nameservice id}.${namenode2}=${namenode 2 address}:namenode2が具体的なnamenodeであることを設定し、クライアントのルーティングを容易にします。dfs.ha.automatic-failover.enabled.${nameservice id}=true:HAクラスタが関連するリクエストを取得した後、利用可能なnamenodeを自動的に取得してサービスに応答するようにします。dfs.client.failover.proxy.provider.${nameservice id}=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider:HAクラスタがプライマリ/スタンバイ切り替えを行うためのロジックツールクラスを指示します。また、HAクラスタが必要とするロジックをカスタマイズしてパッケージ化してアップロードすることもできます。
注意
一部のHA構成パラメータは
namespaceと紐づけられています。例えば、以下の例3のmyclusterのように、関連する構成パラメータを組み合わせて設定する必要があります。
FORMAT = ( TYPE = 'CSV'...):外部ファイルの形式をCSVとして定義します。TYPE:外部ファイルのタイプを指定します。LINE_DELIMITER:ファイルの行区切り文字を指定します。指定しない場合、デフォルト値はLINE_DELIMITER='\n'です。FIELD_DELIMITER:ファイルの列区切り文字を指定します。指定しない場合、デフォルト値はFIELD_DELIMITER='\t'です。ESCAPE:ファイルのエスケープ文字を指定します。例えば、ESCAPE ='*'は、アスタリスク(*)をエスケープ文字として指定し、デフォルトのエスケープ文字(\)を置き換えることを意味します。指定しない場合、デフォルト値はESCAPE ='\'です。FIELD_OPTIONALLY_ENCLOSED_BY:ファイル内でフィールド値を囲む記号を指定します。例えば、ESCAPE = '"'は、値を二重引用符で囲むことを意味します。指定しない場合、デフォルト値は空です。注意
外部テーブルのデータファイルに
NULL値(文字列の NULL ではなく、"NULL" でもない)が含まれている場合、FIELD_OPTIONALLY_ENCLOSED_BYパラメータを明示的に設定する必要があり、そのパラメータ値は空にすることはできません。ENCODING:ファイルの文字セットエンコーディング形式を指定します。現在のMySQLモードでサポートされているすべての文字セットについては、文字セットを参照してください。指定しない場合、デフォルト値はUTF8MB4です。NULL_IF:どの文字列をNULLとして処理するかを指定します。指定しない場合、デフォルト値は空です。SKIP_HEADER:ファイルヘッダーをスキップする行数を指定します。指定しない場合、デフォルトではファイルヘッダーはスキップされません。SKIP_BLANK_LINES:空白行をスキップするかどうかを指定します。指定しない場合、デフォルト値はFALSEです。TRIM_SPACE:ファイル内のフィールドの先頭と末尾のスペースを削除するかどうかを指定します。指定しない場合、デフォルト値はFALSEです。EMPTY_FIELD_AS_NULL:空文字列をNULLとして処理するかどうかを指定します。指定しない場合、デフォルト値はFALSEです。IGNORE_LAST_EMPTY_COLUMN:ファイルの行末が空フィールド(行区切り文字の前が列区切り文字)の場合、その空フィールドを無視するかどうかを指定します。デフォルト値はTRUEで、最後の空フィールドが無視されます。COMPRESSION:オプションです。ファイルの圧縮形式を指定します。取り得る値は以下のとおりです:GZIP/DEFLATE:GZIP形式でファイルを圧縮します。ZSTD:ZSTD形式でファイルを圧縮します。NONE:ファイルが圧縮されていないことを示します(デフォルト値)。SNAPPY_BLOCK:HADOOP-SNAPPY形式でファイルを圧縮します。説明
V4.4.2バージョンでは、V4.4.2 BP1バージョンから圧縮形式
SNAPPY_BLOCKがサポートされています。
PARALLEL_PARSE_ON_SINGLE_FILE:単一のCSVファイルの並列解析を有効にするかどうかを指定します。指定しない場合、デフォルト値はTRUEです。PARALLEL_PARSE_FILE_SIZE_THRESHOLD:このしきい値を超えるサイズのファイルが並列解析される可能性があるかどうかを指定します。単位はバイトです。デフォルト値は256MBです。MAX_ROW_LENGTH:単一行データの最大長を指定します。単位はバイトです。デフォルト値は2MBです。単一のCSVファイルを並列解析する定義段階で使用され、データ読み取りの正確性には影響しません。
説明
V4.4.2バージョンでは、
FORMATオプションはV4.4.2 BP1バージョンから、PARALLEL_PARSE_ON_SINGLE_FILE、PARALLEL_PARSE_FILE_SIZE_THRESHOLD、MAX_ROW_LENGTHのパラメータをサポートしています。FORMAT = ( TYPE = 'PARQUET'...):外部ファイルの形式をPARQUETとして定義します。TYPE:外部ファイルのタイプをPARQUETと指定します。COLUMN_INDEX_TYPE:列インデックスタイプを指定します。現在、'POSITION' と 'NAME' をサポートしており、それぞれ位置で列をインデックス付けし、名前で列をインデックス付けすることを意味します。external$filepos{N}構文を使用する場合、このパラメータを設定する必要があります。
FORMAT = ( TYPE = 'ORC'...):外部ファイルの形式をORCとして定義します。TYPE:外部ファイルのタイプをORCと指定します。COLUMN_INDEX_TYPE:列インデックスタイプを指定します。現在、'POSITION' をサポートしており、位置で列をインデックス付けすることを意味します。external$filepos{N}構文を使用する場合、このパラメータを設定する必要があります。
TYPE = 'ODPS':外部ファイルの形式をODPSタイプと指定します。以下のフィールドも含まれます:ACCESSID:Alibaba CloudアカウントのAccessKey IDを指定します。これは認証に使用されます。ACCESSKEY:AccessKey IDに対応するAccessKey Secretを指定します。これも認証に使用されます。ENDPOINT:ODPSサービスの接続アドレスを指定します。PROJECT_NAME:アクセスする対象ODPSプロジェクト名を指定します。SCHEMA_NAME:オプションです。ODPS内のSchema名を指定します。TABLE_NAME:ODPS内の対象テーブル名を指定します。QUOTA_NAME:オプションです。使用するQuotaを指定します。COMPRESSION_CODE:オプションです。データソースの圧縮形式を指定します。ZLIB、ZSTD、LZ4、ODPS_LZ4の4種類の圧縮形式をサポートしています。設定しない場合は、圧縮を有効にしません。API_MODE:ODPSを呼び出すAPIモードを指定します。取り得る値は以下のとおりです:tunnel_api(デフォルト値):特別なネットワーク設定は不要です:すべてのデプロイメントシナリオに適用されます。OceanBaseデータベースとMaxComputeが同じVPC(仮想プライベートクラウド)内にある必要はありません。
MaxComputeの追加権限は不要です:認証にはAccessIDとAccessKeyのみを提供する必要があり、MaxCompute Storage API権限を有効にする必要はありません。
適用環境:
- OceanBaseデータベースとMaxComputeが同じVPCにデプロイされていない場合。
- MaxCompute Storage APIが有効になっていない場合。
- データ転送のレイテンシ要件が低い場合。
storage_api:ネットワーク依存性:OceanBaseデータベースとMaxComputeが同じVPC内にデプロイされている必要があります。これにより、低レイテンシで高スループットのデータ転送が実現されます。
権限依存性:MaxComputeでStorage API権限を有効にし、アクセスキー(AccessKey)が対応する権限を持っていることを確認する必要があります。
適用環境:
- OceanBaseデータベースとMaxComputeが同じVPCネットワークに属している場合。
- MaxCompute Storage APIが有効になっている場合。
- データ量が非常に多い、またはリアルタイム性の要件が高い場合。
SPLIT:storage_apiを使用する場合、タスクをbyteまたはrow単位で分割し、各スレッドに割り当てるかどうかを指定します。テーブルの各行のデータバイト数に大きな差異がある場合は、SPLITの値をbyteに設定し、それ以外の場合はrowに設定します。
PATTERN:正規表現パターン文字列を指定して、LOCATIONディレクトリ配下のファイルをフィルタリングします。LOCATIONディレクトリ配下の各ファイルがこのパターン文字列に一致する場合、外部テーブルはそのファイルにアクセスできます。一致しない場合は、そのファイルをスキップします。このパラメータを指定しない場合、デフォルトではLOCATIONディレクトリ配下のすべてのファイルにアクセスできます。
ローカルマシンの/home/admin/oceanbase/ディレクトリにdata.csvファイルが保存されていると仮定します。ファイルの内容は以下のとおりです。
1,"lin",98
2,"hei",90
3,"ali",95
Parquet形式以外の外部テーブルの例
OBserverノード上で、テナント管理者がローカルUnixソケットを介してクラスタ内のMySQLテナントに接続します。
接続例は以下のとおりです:
obclient -S /home/admin/oceanbase/run/sql.sock -uroot@sys -p********ローカルUnixソケットを介してOceanBaseデータベースに接続する具体的な操作と説明については、secure_file_privを参照してください。
データベースがアクセス可能なパス
/home/admin/oceanbase/を設定します。SET GLOBAL secure_file_priv = "/home/admin/oceanbase/";コマンドの実行が成功した後、変更を有効にするには、セッションを再起動する必要があります。
データベースに再接続した後、外部テーブル
ext_t3を作成します。CREATE EXTERNAL TABLE ext_t3(id int, name char(10),score int) LOCATION = '/home/admin/oceanbase/' FORMAT = ( TYPE = 'CSV' FIELD_DELIMITER = ',' FIELD_OPTIONALLY_ENCLOSED_BY ='"' ) PATTERN = 'data.csv';
外部テーブルの作成が成功すると、通常のテーブルと同じように SHOW CREATE TABLE ステートメントを使用してテーブルの定義を確認できます。
SHOW CREATE TABLE ext_t3;
クエリ結果は次のとおりです:
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ext_t3 | CREATE EXTERNAL TABLE `ext_t3` (
`id` int(11) GENERATED ALWAYS AS (metadata$filecol1),
`name` char(10) GENERATED ALWAYS AS (metadata$filecol2),
`score` int(11) GENERATED ALWAYS AS (metadata$filecol3)
)
LOCATION='file:///home/admin/oceanbase/'
PATTERN='data.csv'
FORMAT (
TYPE = 'CSV',
FIELD_DELIMITER = ',',
FIELD_OPTIONALLY_ENCLOSED_BY = '"',
ENCODING = 'utf8mb4'
)DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
通常のテーブルと同じようにアクセスすることもできます。外部テーブルをクエリする際、システムは外部テーブルのドライバーレイヤーを通じて外部ファイルを直接読み取り、ファイル形式に従って解析し、OceanBaseデータベースの内部データ型に変換してからデータ行を返します。作成したばかりの外部テーブル lineitem のクエリ例を以下に示します。
SELECT * FROM ext_t3;
クエリ結果は次のとおりです:
+----+------+-------+
| id | name | score |
+----+------+-------+
| 1 | lin | 98 |
| 2 | hei | 90 |
| 3 | ali | 95 |
+----+------+-------+
3 rows in set
さらに、外部テーブルは通常のテーブルと組み合わせてクエリ操作を行うこともできます。現在のデータベースに通常のテーブル info があり、そのデータは以下のとおりです:
+------+--------+------+
| name | sex | age |
+------+--------+------+
| lin | male | 8 |
| hei | male | 9 |
| li | female | 8 |
+------+--------+------+
3 rows in set
外部テーブル ext_t3 と通常のテーブル info を組み合わせたクエリの例を以下に示します。
SELECT info.* FROM info, ext_t3 WHERE info.name = ext_t3.name AND ext_t3.score > 90;
クエリ結果は次のとおりです:
+------+--------+------+
| name | sex | age |
+------+--------+------+
| lin | male | 8 |
| li | female | 8 |
+------+--------+------+
2 rows in set
その他のクエリ操作については、データの読み取りを参照してください。
ODPS JAVA SDK外部テーブルの作成
ODPS JAVA SDK外部テーブルを作成するには、OceanBaseデータベースをJAVA SDKがインストールされた環境で使用する必要があります。JAVA SDK環境のデプロイに関する詳細は、OceanBaseデータベースのJAVA SDK環境のデプロイを参照してください。
ODPS JAVA SDK外部テーブルを作成する例:
CREATE EXTERNAL TABLE lineitem(
l_orderkey BIGINT,
l_partkey BIGINT,
l_suppkey BIGINT,
l_linenumber BIGINT,
l_quantity DECIMAL(15,2),
l_extendedprice DECIMAL(15,2),
l_discount DECIMAL(15,2),
l_tax DECIMAL(15,2),
l_returnflag CHAR(1),
l_linestatus CHAR(1),
l_shipdate DATE,
l_commitdate DATE,
l_receiptdate DATE,
l_shipinstruct CHAR(25),
l_shipmode CHAR(10),
l_comment VARCHAR(44))
PROPERTIES = (
TYPE = 'ODPS'
ACCESSID = '***********'
ACCESSKEY = '***********'
ENDPOINT = 'http://service.cn-hangzhou.maxcompute.aliyun.com/api',
PROJECT_NAME = 'bigdata_public_dataset',
SCHEMA_NAME = 'tpch_10g',
TABLE_NAME = 'lineitem',
QUOTA_NAME = '',
COMPRESSION_CODE = '',
API_MODE = "storage_api",
SPLIT = "byte"
);
外部テーブルの使用上の注意点
外部テーブルはクエリ操作のみ実行可能で、DML操作は実行できません。
外部テーブルをクエリする際、アクセス対象の外部ファイルが削除されている場合、システムはエラーを報告せず、空行を返します。
外部テーブルがアクセスするファイルは外部ストレージシステムによって管理されているため、外部ストレージが利用不可な場合、外部テーブルのクエリはエラーとなります。
次のステップ
外部テーブル作成時、システムはLOCATIONで指定されたパス下でPATTERNに一致するファイルリストをOceanBaseデータベースのシステムテーブルに保存します。外部テーブルのスキャン時には、このリストに基づいて外部ファイルにアクセスします。外部ディレクトリに新しいファイルが追加された場合は、外部テーブルのファイルリストに新規ファイルを追加するため、外部テーブルファイルの更新操作を実行する必要があります。関連する操作については、外部ファイルの管理を参照してください。
外部テーブルは作成後に削除することも可能です。外部テーブルを削除するステートメントは通常のテーブルと同じです。DROP TABLEステートメントを使用して外部テーブルを削除します。詳細な操作については、テーブルの削除を参照してください。