web-dev-qa-db-ja.com

Prestoは「with」クエリでテーブルを作成します

通常、Prestoで(既存のdbテーブルから)テーブルを作成するには、次のようにします。

create table abc as (
select...
)

ただし、コードを単純にするために、次のようなサブクエリを作成しました。

with sub1 as (
select...
),

sub2 as (
select...
),

sub3 as (
select...
)

select
from sub1 join sub2 on ...
          join sub3 on ...

ここにテーブル作成ステートメントをどこに配置しますか?実際のクエリは上記よりも複雑なので、メインクエリ内にサブクエリを配置する必要がないようにしています。

7
Moosa

これは、CREATE TABLEについて不明なINSERT INTOで可能です。

INSERT INTO s1 WITH q1 AS (...) SELECT * FROM q1

多分あなたはこれを試してみることができます:

CREATE TABLE s1 as WITH q1 AS (...) SELECT * FROM q1

7
user3250672

文字列が懸念される場合は、次の作業

WITH sample AS (
    SELECT * FROM (VALUES ('strA', 'strB'), ('strC', 'strD'), ('strE', 'strF')) AS account (name, cat)
)

SELECT name, cat from sample;

整数が関係する値のみの場合、次のように機能します:-

WITH  slab (SNo,Amount) AS (VALUES (1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(6,6000),(7,7000),(8,8000),(9,9000),(10,10000),(11, 11000),(12,12000),(13,13000),(14,14000),(15,15000),(16,16000),(17,17000),(18,18000),(19,19000),(20,20000),(21,21000),(22,22000),(23,23000),(24,24000),(25,25000),(26,26000),(27,27000),(28,28000),(29,29000),(30,30000),(31,31000),(32,32000),(33,33000),(34,34000),(35,35000),(36,36000),(37,37000),(38,38000),(39,39000),(40,40000),(41,41000),(42,42000),(43,43000),(44,44000),(45,45000),(46,46000),(47,47000),(48,48000),(49,49000),(50,50000),(51,51000)
) 
SELECT * FROM slab;
2
SUKUMAR S

構文は、create table .. asを選択します。例えば。以下はPresto 0.170で私のために働きました:

create table memory.default.a as
with w as (
    select * from (values 1) t(x)
)
select * from w;

(私は実験的なmemoryコネクタを使用しているため、これをコピーして貼り付けることができます)

2
Piotr Findeisen

クエリ全体を次のように「ラップ」する必要があると思います。

create table EXAMPLE as (
with sub1 as (
select ...
),
.......

select 
from sub1....

)
1
kltft