ablog

不器用で落着きのない技術者のメモ

Redshift のシステムビューの定義を確認する

Redshift のシステムビューの定義を確認する。

# show view svv_table_info;

↓整形済み
SELECT
    btrim(((stvp.datname) :: character varying) :: text) AS "database",
    btrim(
        (
            (nvl2(mvi.mv_id, mvi.mv_schema, pgn.nspname)) :: character varying
        ) :: text
    ) AS "schema",
    nvl2(mvi.mv_id, mvi.mv_id, pgc.oid) AS table_id,
    btrim(
        (
            (nvl2(mvi.mv_id, mvi.mv_name, pgc.relname)) :: character varying
        ) :: text
    ) AS "table",
    btrim(
        (
            CASE
                WHEN (
                    (pge.autoencode IS NOT NULL)
                    AND (stvc.encoded = 1)
                ) THEN 'Y, AUTO(ENCODE)' :: character varying
                WHEN (
                    (pge.autoencode IS NOT NULL)
                    AND (stvc.encoded = 0)
                ) THEN 'N, AUTO(ENCODE)' :: character varying
                WHEN (stvc.encoded = 1) THEN 'Y' :: character varying
                ELSE 'N' :: character varying
            END
        ) :: text
    ) AS encoded,
    btrim(
        (
            CASE
                WHEN (
                    COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 0
                ) THEN 'EVEN' :: character varying
                WHEN (
                    COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 1
                ) THEN (
                    (
                        (
                            ('KEY(' :: character varying) :: text || stvc."distkey"
                        ) || (')' :: character varying) :: text
                    )
                ) :: character varying
                WHEN (
                    COA LESCE(pge.releffectivediststyle, pgc.reldiststyle) = 8
                ) THEN 'ALL' :: character varying
                WHEN (
                    COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 10
                ) THEN 'AUTO(ALL)' :: character vary ing
                WHEN (
                    COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 11
                ) THEN 'AUTO(EVEN)' :: character varying
                WHEN (
                    COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 12
                ) THEN (
                    (
                        (
                            ('A
UTO(KEY(' :: character varying) :: text || stvc."distkey"
                        ) || ('))' :: character varying) :: text
                    )
                ) :: character varying
                ELSE NULL :: character varying
            END
        ) :: text
    ) AS "diststyle",
    btrim(
        (
            (
                CASE
                    WHE N (
                        (pge.autosortkey = 1)
                        AND (stvc.headsort IS NOT NULL)
                    ) THEN (
                        (
                            ('AUTO(SORTKEY(' :: character varying) :: text || stvc.headsort
                        ) || ('))' :: character varying) :: text
                    )
                    WHEN (
                        (pge.autosortkey = 1)
                        AND (stvc.headsort IS NULL)
                    ) THEN ('AUTO(SORTKEY)' :: character varying) :: text
                    ELSE stvc.headsort
                END
            ) :: character varying
        ) :: text
    ) AS sortkey1,
    stvc.max_varchar,
    stvc.sortkey1_enc,
    stvc.sortkey_num,
    COALESCE(stvc.tblsize, (0) :: bigint) AS size,
    (
        (
            (
                (COALESCE(stvc.tblsize, (0) :: bigint)) :: numeric * 100.0
            ) / (
                (
                    SELECT
                        sum(sp.capacity) AS total_mb
                    FROM
                        stv_node_storage_ capacity sp
                )
            ) :: numeric
        )
    ) :: numeric(10, 4) AS pct_used,
    stvc.empty,
    (
        CASE
            WHEN (
                (
                    (
                        (
                            COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 8
                        )
                        OR (
                            COALESCE(pge.releffectivediststyle, pgc.r eldiststyle) = 10
                        )
                    )
                    AND (stvp.max_rows > 0)
                )
                AND (stvc.headsort IS NOT NULL)
            ) THEN (
                (
                    ((stvp.max_rows - stvp.max_sorted_rows)) :: numeric * 100.0
                ) / (stvp.max_rows) :: numeric
            )
            WHEN (
                (stvp.sum_rows > 0)
                AND (stvc.headsort IS NOT NULL)
            ) THEN (
                (
                    ((stvp.sum_rows - stvp.sum_sorted_rows)) :: numeric * 100.0
                ) / (stvp.sum_rows) :: numeric
            )
            ELSE NULL :: numeric
        END
    ) :: numeric(5, 2) AS un sorted,
    CASE
        WHEN (
            (pgs.stairows = (0) :: double precision)
            AND (
                (pgs.staidels > (0) :: double precision)
                OR (pgs.staiins > (0) :: double precision)
            )
        ) THEN (100) :: numeric
        WHEN (
            (
                (pgs.stairow s = (0) :: double precision)
                AND (pgs.staidels = (0) :: double precision)
            )
            AND (pgs.staiins = (0) :: double precision)
        ) THEN NULL :: numeric
        WHEN (pgs.stairows IS NULL) THEN NULL :: numeric
        WHEN (
            CASE
                WHEN (
                    (
                        COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 8
                    )
                    OR (
                        COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 10
                    )
                ) THEN stvp.max_rows
                ELSE stvp.sum_rows
            END = 0
        ) THEN NULL :: numeric
        WHEN (pgs.stairows > (0) :: double precision) THEN (
            LEAST(
                (
                    (
                        (pgs.staidels + pgs.staiins) * (100) :: double precision
                    ) / pgs.stairows
                ),
                (100) :: double precision
            )
        ) :: numeri c(5, 2)
        ELSE NULL :: numeric
    END AS stats_off,
    (
        (
            CASE
                WHEN (
                    (
                        COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 8
                    )
                    OR (
                        COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 10
                    )
                ) TH EN stvp.max_rows
                ELSE stvp.sum_rows
            END
        ) :: numeric
    ) :: numeric(38, 0) AS tbl_rows,
    stvc.skew_sortkey1,
    (
        round(
            CASE
                WHEN (
                    (
                        (
                            COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 1
                        )
                        OR (
                            CO ALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 12
                        )
                    )
                    AND (stvp.min_rows > 0)
                ) THEN (
                    ((stvp.max_rows) :: numeric * 1.0) / (stvp.min_rows) :: numeric
                )
                WHEN (
                    (
                        (
                            (
                                COALESCE(pge.releffectiv ediststyle, pgc.reldiststyle) = 1
                            )
                            OR (
                                COALESCE(pge.releffectivediststyle, pgc.reldiststyle) = 12
                            )
                        )
                        AND (stvp.min_rows = 0)
                    )
                    AND (stvp.max_rows > 0)
                ) THEN (100) :: numeric
                ELSE NULL :: num eric
            END,
            2
        )
    ) :: numeric(19, 2) AS skew_rows,
    (pgs.stairows) :: numeric(38, 0) AS estimated_visible_rows,
    pge.risk_event,
    (
        (
            CASE
                WHEN (stvc.sortkey_num > 0) THEN COALESCE(stvt.avg_qpd, (0) :: bigint)
                ELSE NULL :: bigint
            END
        ) :: numeric
    ) :: numeric(12, 2) AS vacuum_sort_benefit,
    pge.relcreationtime AS create_time
FROM
    (
        (
            (
                (
                    (
                        (
                            (
                                pg_class pgc
                                JOIN pg_namespace pgn ON ((pgc.relnamespace = pgn.oid))
                            )
                            JOIN (
                                SELECT
                                    stvp.id,
                                    pgd.datname,
                                    sum(stvp."rows") AS sum_rows,
                                    sum(stvp.sorted_rows) AS sum_sorted_rows,
                                    "max"(stvp."rows") AS max_rows,
                                    "max"(stvp.sorted_rows) AS max_s orted_rows,
                                    min(stvp."rows") AS min_rows
                                FROM
                                    (
                                        (
                                            stv_tbl_perm stvp
                                            JOIN stv_slices stvs USING (slice)
                                        )
                                        JOIN pg_database pgd ON (((stvp.db_id) :: oid = pgd.oid))
                                    )
                                GROUP BY
                                    stvp.id,
                                    pgd.dat name
                            ) stvp ON ((pgc.oid = (stvp.id) :: oid))
                        )
                        JOIN (
                            SELECT
                                tblmeta.tbl,
                                "max"(tblmeta.headsort) AS headsort,
                                "max"((tblmeta.distkeycol) :: text) AS "distkey",
                                "max"(tblmeta.varcharlen) AS max_varchar,
                                sum(tblmeta.col_size) AS tblsize,
                                "max"(
                                    CASE
                                        WHEN (tblmeta.sortkey_num <> 1) THEN tblmeta.col_size
                                        ELSE NULL :: bigint
                                    END
                                ) AS max_col_size,
                                "max"(
                                    CASE
                                        WHEN (tblmeta.sortkey _num = 1) THEN tblmeta.col_size
                                        ELSE NULL :: bigint
                                    END
                                ) AS sortkey_col_size,
                                (
                                    round(
                                        (
                                            (
                                                (
                                                    "max"(
                                                        CASE
                                                            WHEN (tblmeta.sortkey_num <> 1) THEN tblmeta.col_size
                                                            ELSE NULL :: bigint
                                                        END
                                                    )
                                                ) :: numeric * 1.0
                                            ) / (
                                                CASE
                                                    WHEN (
                                                        "max"(
                                                            CASE
                                                                WHEN (tblmeta.sortkey_num = 1) THEN tblmeta.col_size
                                                                ELSE NULL :: bigint
                                                            END
                                                        ) > 0
                                                    ) THEN "max"(
                                                        CASE
                                                            WHEN (tblmeta.sortkey_num = 1) THEN tblmeta.col_size EL SE NULL :: bigint
                                                        END
                                                    )
                                                    ELSE NULL :: bigint
                                                END
                                            ) :: numeric
                                        ),
                                        2
                                    )
                                ) :: numeric(19, 2) AS skew_sortkey1,
                                sum(tblmeta.empty) AS empty,
                                "max"(abs(tblmeta.sortkey_num)) AS sortkey_num,
                                "max"(
                                    CASE
                                        WHEN (tblmeta.attencodingtype > 0) THEN 1
                                        ELSE 0
                                    END
                                ) AS encoded,
                                (
                                    btrim(
                                        "max"(
                                            (
                                                CASE
                                                    WHEN (abs(tblmeta.sortkey_num) = 1) THEN format_encoding((tblmeta.attencodingtype) :: integer)
                                                    ELSE NULL: :bpchar
                                                END
                                            ) :: text
                                        )
                                    )
                                ) :: character(32) AS sortkey1_enc
                            FROM
                                (
                                    SELECT
                                        stvts.tbl,
                                        stvts.colnum,
                                        btrim(
                                            (
                                                (
                                                    CASE
                                                        WHEN (
                                                            (pga.attsortkeyord = 1)
                                                            AND (NOT pga.attisdropped)
                                                        ) THEN pga.attname
                                                        WHEN (
                                                            (pga.attsortkeyord = -1)
                                                            AND (NOT pga.attisdropped)
                                                        ) THEN 'INTERLEAVED' :: name
                                                        ELSE NULL :: name
                                                    END
                                                ) :: character varying
                                            ) :: text
                                        ) AS headsort,
                                        (
                                            CASE
                                                WHEN (pga.attisdistkey IS TRUE) THEN p ga.attname
                                                ELSE NULL :: name
                                            END
                                        ) :: character varying AS distkeycol,
                                        CASE
                                            WHEN (pga.atttypid = (1043) :: oid) THEN (pga.atttypmod - 4)
                                            ELSE 0
                                        END AS varcharlen,
                                        pga.attencodingtype,
                                        pga.att sortkeyord AS sortkey_num,
                                        stvts.col_blkcnt AS col_size,
                                        0 AS empty
                                    FROM
                                        (
                                            (
                                                SELECT
                                                    stv_tbl_column_slice_state.table_id AS tbl,
                                                    ((stv_tbl_column_slice_state.col + 1)) :: smallint AS colnum,
                                                    sum(stv_tbl_column_slice_state.num_blocks) AS col_blkcnt
                                                FROM
                                                    stv_tbl_column_slice_state
                                                GROUP BY
                                                    stv_tbl_column_slice_state.table_id,
                                                    ((stv_tbl_column_slice_state.col + 1)) :: smallin t
                                                HAVING
                                                    (sum(stv_tbl_column_slice_state.num_blocks) > 0)
                                            ) stvts
                                            LEFT JOIN pg_attribute pga ON (
                                                (
                                                    ((stvts.tbl) :: oid = pga.attrelid)
                                                    AND (stvts.colnum = pga.attnum)
                                                )
                                            )
                                        )
                                    WHERE
                                        (stvts.tbl > 0)
                                    GROUP BY
                                        stvts.tbl,
                                        stvts.colnum,
                                        stvts.col_blkcnt,
                                        btrim(
                                            (
                                                (
                                                    CASE
                                                        WHEN (
                                                            (pga.attsortkeyord = 1)
                                                            AND (NOT pga.attisdropped)
                                                        ) THEN pga.attname
                                                        WHEN (
                                                            (pga.attsortkeyord = -1)
                                                            AND (NOT pga.attisdropped)
                                                        ) THEN 'INTERLEAVED' :: name
                                                        ELSE NULL :: name
                                                    END
                                                ) :: character varying
                                            ) :: text
                                        ),
                                        (
                                            CASE
                                                WHEN (pga.attisdistkey IS TRUE) THEN pga.attname
                                                ELSE NULL :: name
                                            END
                                        ) :: character vary ing,
                                        CASE
                                            WHEN (pga.atttypid = (1043) :: oid) THEN (pga.atttypmod - 4)
                                            ELSE 0
                                        END,
                                        pga.attencodingtype,
                                        pga.attsortkeyord
                                ) tblmeta
                            GROUP BY
                                tblmeta.tbl
                        ) stvc ON ((pgc.oid = (stvc.tbl) :: o id))
                    )
                    LEFT JOIN (
                        SELECT
                            pg_statistic_indicator.stairelid,
                            sum(pg_statistic_indicator.stairows) AS stairows,
                            sum(pg_statistic_indicator.staiins) AS staiins,
                            sum(pg_statistic_indicator.s taidels) AS staidels
                        FROM
                            pg_statistic_indicator
                        GROUP BY
                            pg_statistic_indicator.stairelid
                        HAVING
                            (count(pg_statistic_indicator.stairelid) = 1)
                    ) pgs ON ((pgc.oid = pgs.stairelid))
                ) LEF T
                JOIN (
                    SELECT
                        pg_class_extended.reloid,
                        btrim(
                            (
                                (
                                    "max"(
                                        CASE
                                            WHEN (
                                                (pg_class_extended.colnum = 5)
                                                AND (pg_class_extended.value <> '' :: text)
                                            ) THEN "replace"(
                                                pg_class_extended.value,
                                                spli t_part(pg_class_extended.value, '|' :: text, 3),
                                                (
                                                    date_add(
                                                        'us' :: text,
                                                        (
                                                            split_part(pg_class_extended.value, '|' :: text, 3)
                                                        ) :: bigint,
                                                        '2000-01-01 00:00:00' :: timestamp without time zone
                                                    )
                                                ) :: text
                                            )
                                            ELSE NULL :: text
                                        END
                                    )
                                ) :: character varying
                            ) :: text
                        ) AS risk_event,
                        "max"(
                            CASE
                                WHEN (
                                    (pg_class_extended.colnum = 12)
                                    AND (pg_class_extended.value = (1) :: text)
                                ) THEN (pg_class_extende d.value) :: smallint
                                ELSE NULL :: smallint
                            END
                        ) AS autosortkey,
                        "max"(
                            CASE
                                WHEN (
                                    (pg_class_extended.colnum = 14)
                                    AND (pg_class_extended.value = (1) :: text)
                                ) THEN pg_class_extended.value ELS E NULL :: text
                            END
                        ) AS autoencode,
                        (
                            "max"(
                                CASE
                                    WHEN (pg_class_extended.colnum = 0) THEN pg_class_extended.value
                                    ELSE NULL :: text
                                END
                            )
                        ) :: smallint AS releffectivediststyle,
                        "max"(
                            CASE
                                WHEN (pg_class_extended.colnum = 1) THEN date_add(
                                    ('microsecond' :: character varying) :: text,
                                    (pg_class_extended.value) :: bigint,
                                    '2000-01-01 00:00:00' :: timestamp without time zone
                                )
                                ELSE NULL: :timestamp without time zone
                            END
                        ) AS relcreationtime
                    FROM
                        pg_class_extended
                    GROUP BY
                        pg_class_extended.reloid
                ) pge ON ((pgc.oid = pge.reloid))
            )
            LEFT JOIN (
                SELECT
                    stv_table_partitions.i d,
                    CASE
                        WHEN (avg(stv_table_partitions.qpd) = 0) THEN NULL :: bigint
                        ELSE avg(stv_table_partitions.qpd)
                    END AS avg_qpd
                FROM
                    stv_table_partitions
                WHERE
                    (
                        (stv_table_partitions.is_sorted = 'f' :: bpchar)
                        AND (stv_table_partitions.qpd > 0)
                    )
                GROUP BY
                    stv_table_partitions.id
            ) stvt ON ((pgc.oid = (stvt.id) :: oid))
        )
        LEFT JOIN (
            SELECT
                pce.reloid AS mv_id,
                pgn.nspname AS mv_schema,
                pgc.relname AS mv_name,
                pgd.refobjid AS tbl_id
            FROM
                pg_rewrite pgr,
                pg_depend pgd,
                pg_class pgc,
                pg_class_extended pce,
                pg_namespace pgn
            WHERE
                (
                    (
                        (
                            (
                                (
                                    (
                                        (
                                            (
                                                (pgr.rulename = '_RETURN' :: name)
                                                AND (pgr.oid = pgd.objid)
                                            )
                                            AND (pgd.refobjsubid = 1)
                                        )
                                        AND (pgd.deptype = 'n' :: "char")
                                    )
                                    AND (pgd.refclassid = ('pg_class' :: regclass) :: oid)
                                )
                                AND (pgr.ev_class = pce.reloid)
                            )
                            AND (pce.c olnum = 6)
                        )
                        AND (pgc.oid = pce.reloid)
                    )
                    AND (pgn.oid = pgc.relnamespace)
                )
        ) mvi ON ((mvi.tbl_id = pgc.oid))
    )
WHERE
    (pgn.nspname <> 'pg_automv' :: name);