📣新登場!TiDB Cloud BYOC、TiDB Cloud Filesystem、PostgreSQL-compatible TiDB Cloud Starter がパブリックプレビュー中。このページは自動翻訳されたものです。原文はこちらからご覧ください。

INFER_SCHEMA



ファイルメタデータのスキーマを自動検出し、カラム定義を取得します。

infer_schema は現在、次のファイル形式をサポートしています。

  • Parquet - スキーマ推論をネイティブにサポート
  • CSV - 区切り文字のカスタマイズとヘッダー検出に対応
  • NDJSON - 改行区切りの JSON ファイル

圧縮のサポート: すべての形式で、拡張子 .zip, .xz, .zst の圧縮ファイルもサポートされます。

構文

INFER_SCHEMA( LOCATION => '{ internalStage | externalStage }' [ PATTERN => '<regex_pattern>'] [ FILE_FORMAT => '<format_name>' ] [ MAX_RECORDS_PRE_FILE => <number> ] [ MAX_FILE_COUNT => <number> ] )

パラメータ

パラメータ説明デフォルト例
LOCATIONstage の場所: @<stage_name>[/<path>]必須'@my_stage/data/'
PATTERNstage 済みファイルに一致する正規表現パターンです。@<stage_name>[/<path>] の後のファイルパス部分に対してマッチします。PATTERN を使用した stage ファイルのフィルタリング を参照してください。すべてのファイル'.*[.]csv', '.*[.]parquet'
FILE_FORMAT解析に使用するファイル形式名stage の形式'csv_format', 'NDJSON'
MAX_RECORDS_PRE_FILEファイルごとにサンプリングする最大レコード数すべてのレコード100, 1000
MAX_FILE_COUNT処理する最大ファイル数すべてのファイル5, 10

例

Parquet ファイル

-- Create stage and export data CREATE STAGE test_parquet; COPY INTO @test_parquet FROM (SELECT number FROM numbers(10)) FILE_FORMAT = (TYPE = 'PARQUET'); -- Infer schema from parquet files using pattern SELECT * FROM INFER_SCHEMA( location => '@test_parquet', pattern => '.*[.]parquet' );

結果:

+-------------+-----------------+----------+----------+----------+ | column_name | type | nullable | filenames| order_id | +-------------+-----------------+----------+----------+----------+ | number | BIGINT UNSIGNED | false | data_... | 0 | +-------------+-----------------+----------+----------+----------+

CSV ファイル

-- Create stage and export CSV data CREATE STAGE test_csv; COPY INTO @test_csv FROM (SELECT number FROM numbers(10)) FILE_FORMAT = (TYPE = 'CSV'); -- Create a CSV file format CREATE FILE FORMAT csv_format TYPE = 'CSV'; -- Infer schema using pattern and file format SELECT * FROM INFER_SCHEMA( location => '@test_csv', pattern => '.*[.]csv', file_format => 'csv_format' );

結果:

+-------------+---------+----------+----------+----------+ | column_name | type | nullable | filenames| order_id | +-------------+---------+----------+----------+----------+ | column_1 | BIGINT | true | data_... | 0 | +-------------+---------+----------+----------+----------+

ヘッダー付き CSV ファイルの場合:

-- Create CSV file format with header support CREATE FILE FORMAT csv_headers_format TYPE = 'CSV' field_delimiter = ',' skip_header = 1; -- Export data with headers CREATE STAGE test_csv_headers; COPY INTO @test_csv_headers FROM ( SELECT number as user_id, 'user_' || number::string as user_name FROM numbers(5) ) FILE_FORMAT = (TYPE = 'CSV', output_header = true); -- Infer schema with headers SELECT * FROM INFER_SCHEMA( location => '@test_csv_headers', file_format => 'csv_headers_format' );

より高速に推論するためにレコード数を制限する場合:

-- Sample only first 5 records for schema inference SELECT * FROM INFER_SCHEMA( location => '@test_csv', pattern => '.*[.]csv', file_format => 'csv_format', max_records_pre_file => 5 );

NDJSON ファイル

-- Create stage and export NDJSON data CREATE STAGE test_ndjson; COPY INTO @test_ndjson FROM (SELECT number FROM numbers(10)) FILE_FORMAT = (TYPE = 'NDJSON'); -- Infer schema using pattern and NDJSON format SELECT * FROM INFER_SCHEMA( location => '@test_ndjson', pattern => '.*[.]ndjson', file_format => 'NDJSON' );

結果:

+-------------+---------+----------+----------+----------+ | column_name | type | nullable | filenames| order_id | +-------------+---------+----------+----------+----------+ | number | BIGINT | true | data_... | 0 | +-------------+---------+----------+----------+----------+

より高速に推論するためにレコード数を制限する場合:

-- Sample only first 5 records for schema inference SELECT * FROM INFER_SCHEMA( location => '@test_ndjson', pattern => '.*[.]ndjson', file_format => 'NDJSON', max_records_pre_file => 5 );

複数ファイルでのスキーママージ

ファイルごとにスキーマが異なる場合、infer_schema はそれらを賢くマージします。

-- Suppose you have multiple CSV files with different schemas: -- file1.csv: id(INT), name(VARCHAR) -- file2.csv: id(INT), name(VARCHAR), age(INT) -- file3.csv: id(FLOAT), name(VARCHAR), age(INT) SELECT * FROM INFER_SCHEMA( location => '@my_stage/', pattern => '.*[.]csv', file_format => 'csv_format' );

結果には、マージされたスキーマが表示されます。

+-------------+---------+----------+-----------+----------+ | column_name | type | nullable | filenames | order_id | +-------------+---------+----------+-----------+----------+ | id | VARCHAR | true | file1,... | 0 | -- INT+FLOAT→VARCHAR | name | VARCHAR | true | file1,... | 1 | | age | BIGINT | true | file1,... | 2 | -- Missing in file1→nullable +-------------+---------+----------+-----------+----------+

パターンマッチングとファイル数の制限

パターンマッチングを使用すると、複数ファイルからスキーマを推論できます。

-- Infer schema from all CSV files in the directory SELECT * FROM INFER_SCHEMA( location => '@my_stage/', pattern => '.*[.]csv' );

パフォーマンスを向上させるために、処理するファイル数を制限できます。

-- Process only the first 5 matching files SELECT * FROM INFER_SCHEMA( location => '@my_stage/', pattern => '.*[.]csv', max_file_count => 5 );

圧縮ファイル

infer_schema は圧縮ファイルを自動的に処理します。

-- Works with compressed CSV files SELECT * FROM INFER_SCHEMA(location => '@my_stage/data.csv.zip'); -- Works with compressed NDJSON files SELECT * FROM INFER_SCHEMA( location => '@my_stage/data.ndjson.xz', file_format => 'NDJSON', max_records_pre_file => 50 );

推論されたスキーマからテーブルを作成する

infer_schema 関数はスキーマを表示しますが、テーブルは作成しません。推論されたスキーマからテーブルを作成するには、次のようにします。

-- Create table structure from file schema CREATE TABLE my_table AS SELECT * FROM @my_stage/ (pattern=>'.*[.]parquet') LIMIT 0; -- Verify the table structure DESC my_table;

このページは役に立ちましたか?