CREATE DATASOURCE TABLE
説明
CREATE TABLE
文は、データソースを使って新しいテーブルを定義します。
構文
CREATE TABLE [ IF NOT EXISTS ] table_identifier
[ ( col_name1 col_type1 [ COMMENT col_comment1 ], ... ) ]
USING data_source
[ OPTIONS ( key1=val1, key2=val2, ... ) ]
[ PARTITIONED BY ( col_name1, col_name2, ... ) ]
[ CLUSTERED BY ( col_name3, col_name4, ... )
[ SORTED BY ( col_name [ ASC | DESC ], ... ) ]
INTO num_buckets BUCKETS ]
[ LOCATION path ]
[ COMMENT table_comment ]
[ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
[ AS select_statement ]
USING 句と AS SELECT 句の間の句は、任意の順番で入力できることに注してください。例えば、TBLPROPERTIE の後に SCOMMENT table_comment を書くことができます。
パラメータ
-
table_identifier
オプションでデータベース名で修飾できるテーブル名を指定します。
Syntax:
[ database_name. ] table_name
-
USING data_source
データソースはテーブルの作成に使われる入力形式です。データソースは CSV、TXT、ORC、JDBC、PARQUET などです。
-
PARTITIONED BY
パーティションは指定された列に基づいてテーブルに作成されます。
-
CLUSTERED BY
テーブルに作成されたパーティションは、バケット化に指定されたカラムに基づいて固定バケットにバケット化されます。
注意: バケット化は、バケット(およびバケット列)を使ってデータのパーティションを決定し、データのシャッフルを回避する最適化手法です。
-
SORTED BY
バケット列の順序を指定します。オプションで、SORTED BY句の列名の後に、昇順の場合はASCを使い、降順の場合はDESCを使えます。指定しない場合はデフォルトでASCが想定されます。
-
INTO num_buckets BUCKETS
CLUSTERED BY
句で使われるバケット番号を指定します。 -
LOCATION
テーブルが格納されるディレクトリのパス。これは HDFS などの分散ストレージ上のパスである可能性があります。
-
COMMENT
テーブルを記述する文字列リテラル。
-
TBLPROPERTIES
テーブル定義のタグ付けに使われるキーと値のペアのリスト。
-
AS select_statement
テーブルは、select 文からのデータを使って入力されます。
データソースの相互作用
データソーステーブルは、基になるデータソースへのポインタのように機能します。例えば、JDBC データソースを使って、MySQL のテーブル “bar” を指すテーブル “foo” を Spark で作成することができます。テーブル “foo” を読み書きする時に、実際にはテーブル “bar” を読み書きします。
一般に、CREATE TABLE は “pointer” を作成し、それが既存のものを指すようにする必要があります。例外は、parquet、json のようなファイルソースです。LOCATION を指定しない場合、Spark はデフォルトのテーブルの場所を作成します。
CREATE TABLE AS SELECT の場合、Spark は基になるデータソースを入力クエリのデータで上書きし、入力クエリとまったく同じデータを含むようにテーブルが作成されます。
例
--Use data source
CREATE TABLE student (id INT, name STRING, age INT) USING CSV;
--Use data from another table
CREATE TABLE student_copy USING CSV
AS SELECT * FROM student;
--Omit the USING clause, which uses the default data source (parquet by default)
CREATE TABLE student (id INT, name STRING, age INT);
--Specify table comment and properties
CREATE TABLE student (id INT, name STRING, age INT) USING CSV
COMMENT 'this is a comment'
TBLPROPERTIES ('foo'='bar');
--Specify table comment and properties with different clauses order
CREATE TABLE student (id INT, name STRING, age INT) USING CSV
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
--Create partitioned and bucketed table
CREATE TABLE student (id INT, name STRING, age INT)
USING CSV
PARTITIONED BY (age)
CLUSTERED BY (Id) INTO 4 buckets;