簡體   English   中英

在 Netezza 系統中組合多個數據集

[英]Combining several datasets in a Netezza System

我們有一個包含 65 個表的數據庫,從 Mon_Tues_Wed_201701 到 Mon_Tues_Wed_202205。 我們使用 Mon_Tues_Wed_yyyymm 的命名約定創建新表,因此顯然它正在增長。 每個表包含大約 1m-2m 行。

這是我們想要做的:

  1. 將所有表合並為一張表
  2. 這樣做是自動的,所以我們所要做的就是點擊運行語句——無需干預或手動更改
  3. 創建一個最終表,它是 65 多個其他視圖的聯合。
  4. 獎勵:如果每個表都可以添加(合並時)視圖的名稱(即 Source = 'Mon_Tues_Wed_202205'),將不勝感激。

我們目前在網格系統上的 SAS 中執行此操作:

  1. 從 Netezza 導入數據
  2. 添加獎金列
  3. 合並數據
  4. 導出回 Netezza

不幸的是,這個過程需要 6 小時(每次視圖導入 1 分鍾以上,總時間 65 分鍾以上,添加變量需要 15 分鍾,導出到 Netezza 需要 2 小時以上)。

如果您可以向我展示可以執行上述操作的代碼,我將不勝感激。 我是 Netezza 的新手,似乎 T-SQL 處理中的許多規則都不適用。

謝謝

保拉

-- This can be done dynamically via a Stored Procedure
-- For example ...

    create or replace procedure my_dynamic_sql()
        returns integer
        language nzplsql
        execute as caller
    as begin_proc
    
    DECLARE
        tables RECORD;
        my_sql VARCHAR;
        union_statement VARCHAR;
        newline VARCHAR;
    BEGIN
    
        newline := chr(10);
        union_statement := '';
    
        my_sql := 'create table MON_TUES_WED_SUMMARY as' || newline ;
    
        raise notice 'Generating dynamic sql for';
    
        FOR tables IN
        SELECT TABLENAME FROM _V_TABLE WHERE OBJTYPE = 'TABLE' AND upper(TABLENAME) LIKE 'MON_TUES_WED_______' ORDER BY 1
        LOOP
    
            raise notice '     Table: %', tables.tablename;
    
            my_sql := my_sql || union_statement || 'select ''' || tables.tablename || '''::varchar(128) as source_table, * from ' || tables.tablename ;
    
            union_statement := ' union all' || newline ;
    
        END LOOP;
    
        raise notice 'Dropping the OLD results table';
        execute immediate 'DROP TABLE MON_TUES_WED_SUMMARY IF EXISTS;';
    
        raise notice 'The SQL looks like this %', my_sql;
    
        raise notice 'Executing the sql now ...';
        execute immediate my_sql;
    
        raise notice 'Done creating table MON_TUES_WED_SUMMARY';
    
    end;
    end_proc;
    
    --------------------------------------------------------------------------------
    
    -- Then, to invoke the stored procedure
    call my_dynamic_sql;

暫無
暫無

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

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