Hive_Hive WITH table_name ASは一時テーブルを生成します

参考記事:

https://blog.csdn.net/Abysscarry/article/details/81322669

 

SQLを作成するとき、一時テーブルを使用する必要があることがよくあります。その後、この一時テーブルに基づいて後続の操作を実行しますが、一時テーブルの作成には一定のコストがかかります。

 

この一時テーブルを保存する必要がなく、次のものを限られた回数だけ使用する必要がある場合は、次の方法を使用できます。

 

背景:


比較的複雑な構造のSQLステートメントを記述する場合、サブクエリを複数のレベルで複数の場所で再利用できます。現時点では、with asステートメントを使用してそれを分離できるため、SQLの可読性が大幅に向上します。 SQLの簡略化〜
注:現在、oracle、sql server、hiveなどはすべてas usageでサポートされていますが、mysqlではサポートされていません。
 

 

1.はじめに


asはサブクエリパーツも呼ばれます。最初にsqlフラグメントを定義します。sqlフラグメントは、sqlステートメント全体で使用されます。sqlステートメントを読みやすくするために、データ提供の一部として、ユニオンやその他のコレクションでよく使用されます。稼働中。

with asはビューまたは一時テーブルに似ており、SQLステートメントの一部をエイリアスとして格納するために使用できますが、asは一度だけであり、他のSQLで使用する必要があるという違いがあります。

最大の利点は、コードの読みやすさを適切に改善することであり、with句を後で複数回使用する場合、これによりSQLが大幅に簡素化されます。さらに重要なのは、1つの分析、複数の使用、それが提供される理由です。パフォーマンスに関しては、「読み取りを少なくする」という目標が達成されます。


 

第二に、使用

 

WITH t1 AS (
        SELECT *
        FROM carinfo
    ), 
    t2 AS (
        SELECT *
        FROM car_blacklist
    )
SELECT *
FROM t1, t2



注:クエリ全体はSQLクエリである必要があります。つまり、with asステートメントの後にセミコロンを追加することはできません。そうしないと、エラーが報告されます。
 

 

3.注意が必要な事項

 

1.  句では、引用符で囲まれた文を選択する必要があり、以前に定義されたキーワードと同じレベルで、一度だけ使用することができ、よりだけよりも、カンマで区切られた句と次のクエリの間での最後のものは、コンマを持つことができません。唯一の権利で大括弧は分離され、句を含むクエリは大括弧で囲む必要があります。

次の文言はエラーを報告します:

with t1 as (select * from carinfo)
with t2 as (select * from car_blacklist)
select * from t1,t2
with t1 as (select * from carinfo);
select * from t1

 

 

2. with句が定義されているが、選択クエリが実行されない場合、エラーが報告されます!

次の文言はエラーを報告します:

with t1 as (select * from carinfo)

 

正しい記述(t1を使用しなくてもかまいません。後で選択できます):

with t1 as (select * from carinfo)
select * from carinfo

 

3.前のwith句で定義されたクエリは、次のwith句で使用できます。ただし、with句をwith句内にネストすることはできません。

正しい記述:

with t1 as (select * from carinfo),
t2 as (select t1.id from t1)
select * from t2

 

元の記事を519件公開 1146 件を賞賛 283万回の閲覧

おすすめ

転載: blog.csdn.net/u010003835/article/details/105399470