簡體   English   中英

雪花存儲過程為外部表執行創建語句

[英]Snowflake Stored Procedure to execute create statement for external table

嘗試在雪花中創建一個存儲過程,該過程需要 arguments 使用來自推斷模式的暫存文件的元數據為外部表生成“創建語句”並執行它。 由於我對 Snowflake 存儲過程相當陌生,因此真的很感謝有關如何實現這一點的輸入嗎?

CREATE OR REPLACE PROCEDURE DatabaseName.SchemaName.TEST_PROCEDURE(DB_NAME STRING, SCHEMA_NAME 
STRING, TABLE_NAME STRING , FILEPATH STRING)
returns string 
language javascript
as
$$
var cmd = `
   SELECT
   'CREATE OR REPLACE EXTERNAL TABLE ' || DB_NAME ||'.'||SCHEMA_NAME||'.'||TABLE_NAME|| ' (' 
||
LISTAGG(
  CLEAN_COLUMN || ' ' || TYPE || ' AS (' ||
  'VALUE:'|| CLEAN_COLUMN || '::' || TYPE || ')', ', ') AS QUERY_TEXT
 FROM (
SELECT *
,CASE WHEN COLUMN_NAME LIKE '%#%' THEN '"'||COLUMN_NAME||'"' ELSE COLUMN_NAME END AS CLEAN_COLUMN
from table(
  INFER_SCHEMA(
    LOCATION => '@db.src_xxx.stg_yyyy/2021-awdfg'
    ,FILE_FORMAT => '@db.src_xxx.parquet'
  )
) A
 )
`
var sql = snowflake.createStatement({sqlText: cmd});
var result = sql.execute();
    return 'Success';
$$;

創建外部表支持USING TEMPLATE功能:

創建外部表:從暫存文件中導出列定義 - 預覽

在此版本中, Snowflakes 支持使用從一組包含半結構化數據的暫存文件派生的列定義創建新的外部表。 在 CREATE EXTERNAL TABLE 語句中包含 USING TEMPLATE 關鍵字

CREATE OR REPLACE EXTERNAL TABLE myet USING TEMPLATE ( SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) FROM TABLE( INFER_SCHEMA( LOCATION=>'@filestage', FILE_FORMAT=>'ffparquet' ) ) ) location=@filestage file_format=ffparquet auto_refresh=false;

此功能目前僅限於 Apache Parquet、Apache Avro 和 ORC 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM