tencent cloud

Data Lake Compute

SELECT STATEMENT

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-25 12:00:06
SELECT ステートメント:ゼロ以上のテーブルからデータ行を取得します。

構文

[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT ] select_expression [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ LIMIT [ count | ALL ] ]

パラメータ

[ WITH with_query [, ....] ]

WITHを使用してネストされたクエリをフラット化したり、サブクエリを簡素化したりできます。with_queryの構文は次のとおりです:
subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)
subquery_table_name は、WITH句のサブクエリ結果を定義するために使用される一時テーブルの一意の名前です。各subqueryは、FROM句で参照可能なテーブル名を持っている必要があります。
column_name [, ...] はオプションの出力列名リストです。列名の数は、subqueryで定義された列数と等しいか、それ以下である必要があります。
subquery は任意のクエリ文です。

[ ALL | DISTINCT ] select_expr

ALL と DISTINCT オプションは、重複行を返すかどうかを指定します。これらのオプションが指定されていない場合、デフォルトはALL(すべての一致する行を返す)です。DISTINCT は結果セットから重複行を削除することを指定します。

FROM from_item [, ...]

from_item はビュー、テーブル、サブクエリのいずれかであり、複数のテーブルを結合する場合、サポートされる結合タイプは次のとおりです:
[ INNER ] JOIN
LEFT [ OUTER ] JOIN
RIGHT [ OUTER ] JOIN
FULL [ OUTER ] JOIN
CROSS JOIN
ON join_conditionjoin_conditionを使用する場合、複数のテーブルの結合キーに対して列名を指定できます;join_columnを使用する場合、join_columnは両方のテーブルに存在する必要があります。

[ WHERE condition ]

指定した condition に基づいて結果をフィルタリングし、条件を満たす結果セットを返します。

[ GROUP BY [ ALL | DISTINCT ] grouping_expressions [, ...] ]

GROUP BY 式は、指定した列名に基づいて出力をグループ化できます。

[HAVING condition ]

集約関数とGROUP BY句と一緒に使用します。どのグループを選択するかを制御し、conditionを満たさないグループを除外します。このフィルタリングは、グループと集計の計算後に発生します。

[{UNION | INTERSECT | EXCEPT} [ALL | DISTINCT] union_query]

UNIONINTERSECT および EXCEPT は複数の結果を組み合わせます。UNION は最初のクエリで生成された行と2番目のクエリで生成された行を組み合わせます。重複を排除するために、UNIONはハッシュテーブルを構築し、これによりメモリが消費されます。より良いパフォーマンスを得るためには、UNION ALLの使用が推奨されます。
INTERSECT は、最初のクエリと2番目のクエリの結果の両方に存在する行のみを返します。
EXCEPT は、最初のクエリ結果の行から、2番目のクエリで見つかった行を除いたものを返します。

[ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]

1つ以上の出力式に基づいて結果セットを並べ替えます。句に複数の式が含まれている場合、結果セットは最初のに基づいて並べ替えられます。次に、2番目のが最初の式の一致する値を持つ行に適用され、以降も同様に続きます。

WITH Clause

WITH句は、クエリで使用される名前付きリレーションを定義します。これにより、ネストされたクエリをフラット化したり、サブクエリを簡素化したりできます。例えば、以下のクエリは同等です:
WITH x AS (SELECT a, MAX(b) AS b FROM t GROUP BY a)
SELECT a, b FROM x;
複数のサブクエリと組み合わせることもできます:
WITH
t1 AS (SELECT a, MAX(b) AS b FROM x GROUP BY a),
t2 AS (SELECT a, AVG(d) AS d FROM y GROUP BY a)
SELECT t1.*, t2.*
FROM t1
JOIN t2 ON t1.a = t2.a;

GROUP BY Clause

GROUPBY句は、SELECT文の出力を一致する値を持つ行グループに分割します。単純なGROUPBY句には、入力列で構成される任意の式を含めることができ、出力列を位置で選択する序数にすることもできます:
SELECT count(*), nationkey FROM customer GROUP BY 2;
SELECT count(*), nationkey FROM customer GROUP BY nationkey;
SELECT count(*) FROM customer GROUP BY mktsegment;

GROUPING SETS

グループ化セットを使用すると、グループ化する列の複数のリストを指定できます。指定されたグループ化列のサブリストに含まれていない列は空に設定されます。
SELECT origin_state, origin_zip, destination_state, sum(package_weight)
FROM shipping
GROUP BY GROUPING SETS (
(origin_state),
(origin_state, origin_zip),
(destination_state));
SELECT origin_state, NULL, NULL, sum(package_weight)
FROM shipping GROUP BY origin_state
UNION ALL
SELECT origin_state, origin_zip, NULL, sum(package_weight)
FROM shipping GROUP BY origin_state, origin_zip
UNION ALL
SELECT NULL, NULL, destination_state, sum(package_weight)
FROM shipping GROUP BY destination_state;

HAVING Clause

HAVING句は、集計関数とgroupby句と共に使用され、どのグループを選択するかを制御します。HAVING句は、指定された条件を満たさないグループを除外します。
SELECT count(*), mktsegment, nationkey,
CAST(sum(acctbal) AS bigint) AS totalbal
FROM customer
GROUP BY mktsegment, nationkey
HAVING sum(acctbal) > 5700000
ORDER BY totalbal DESC;

IN

IN 演算子は、WHERE 句で複数の値を指定することができます。
SELECT name
FROM nation
WHERE regionkey IN (SELECT regionkey FROM region)

EXISTS

EXISTS演算子は、サブクエリにレコードがあるかどうかを判断するために使用されます。1つ以上のレコードが存在する場合はTrueを返し、それ以外の場合はFalseを返します。
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition)

USING

using キーワードを使用して簡素化します。
クエリは等価条件の結合でなければなりません。
等価結合の列は同じ名前とデータ型を持っている必要があります。
SELECT *
FROM table_1
JOIN table_2
USING (key_A, key_B)
SELECT *
FROM (
VALUES
(1, 3, 10),
(2, 4, 20)
) AS table_1 (key_A, key_B, y1)
LEFT JOIN (
VALUES
(1, 3, 100),
(2, 4, 200)
) AS table_2 (key_A, key_B, y2)
USING (key_A, key_B);

CROSS JOIN

クロス結合は、2つのリレーションのデカルト積(すべての組み合わせ)を返します。
SELECT *
FROM nation
CROSS JOIN region

LIMIT Clause

LIMIT句は結果セットの行数を制限します。
SELECT orderdate FROM orders LIMIT 5

ORDER BY Clause

ORDER BY 句は、1つ以上の出力式に基づいて結果セットを並べ替えるために使用されます。
構文:ORDER BY 式 [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...]
SELECT name, age FROM person ORDER BY age
SELECT * FROM student
ORDER BY student_id
SELECT * FROM student
ORDER BY student_id,student_name

EXCEPT

EXCEPT句/演算子は、2つのSELECT文を結合し、2番目のSELECT文で返されなかった最初のSELECT文の行を返すために使用されます。これは、EXCEPTが2番目のSELECT文で利用できない行のみを返すことを意味します。
UNION操作を使用する場合と同様のルールが、EXCEPT演算子を使用する場合にも適用されます。
SELECT * FROM (VALUES 13, 42)
EXCEPT
SELECT 13

INTERSECT

SELECT ステートメントから2つ以上の結果セットの異なる行を返します。
SELECT * FROM (VALUES 13, 42)
INTERSECT
SELECT 1

UNION

2つ以上のSELECT文の結果セットを1つの結果セットに結合します。結果セット内の重複行を保持するには、UNION ALL演算子を使用してください。
SELECT 13
UNION
SELECT 42
SELECT id FROM a
UNION ALL
SELECT id FROM b;

TABLESAMPLE

BERNOULLI:各行をサンプルとして選択する確率はサンプルパーセンテージに等しい。Bernoulli法でテーブルをサンプリングする場合、テーブルのすべての物理ブロックをスキャンし、一部の行をスキップします(サンプリングパーセンテージと実行時に計算されるランダム値の比較に基づく)。結果に行が含まれる確率は他の行とは独立しています。これにより、サンプリングテーブルをディスクから読み取るのに必要な時間は短縮されません。サンプリング出力をさらに処理する場合、総クエリ時間に影響を与える可能性があります。
SYSTEM:このサンプリング方法は、テーブルを論理データセグメントに分割し、その粒度でテーブルをサンプリングします。このサンプリング方法では、特定のデータセグメントからすべての行を選択するか、スキップします(サンプリングパーセンテージと実行時に計算されるランダム値の比較に基づく)。システムサンプリングで選択される行は、使用するコネクタによって異なります。たとえば、Hiveと一緒に使用する場合、HDFS上のデータのレイアウト方法に依存します。この方法では、独立したサンプリング確率は保証されません。
SELECT *
FROM users TABLESAMPLE BERNOULLI (50);
SELECT *
FROM users TABLESAMPLE SYSTEM (75);

PIVOT Clause

特定の列に基づいて集計値を返します。
SELECT * FROM person
PIVOT (
SUM(age) AS a, AVG(class) AS c
FOR name IN ('John' AS john, 'Mike' AS mike)
);

Lateral View Clause

LATERAL VIEW [ OUTER ] generator_function ( expression [ , ... ] ) [ table_alias ] AS column_alias [ , ... ]

エスケープ

シングルクォートをエスケープするには、その前に別のシングルクォートを追加します。以下の例のように:
Select 'dlc''test'
テーブルを作成する際にエスケープ文字またはエスケープシーケンスを指定します。例えば、以下の方法で作成します:
CREATE EXTERNAL TABLE IF NOT EXISTS `csv_test_2222` (
`_c0` STRING,
`_c1` INTEGER,
`_c2` INTEGER,
`_c3` INTEGER
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES (
'separatorChar' = '''',
'quoteChar' = ''''
)
STORED AS `textfile`
LOCATION 'cosn://dlc-nj-1258469122/csv/100M/


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック