笔记~~~~~

文章展示了如何通过SQL查询获取数据库表结构信息,包括字段名、类型、主键等,并演示了在Kudu、Hive和Doris中创建不同格式的表,如Kudu的分区表和Hive的Seq/Text格式表,以及Doris的主键和分区策略。
摘要由CSDN通过智能技术生成

导出表结构

SELECT
    (
        case
            when a.colorder = 1 then d.name
            else null
        end
    ) 表名,
    a.colorder 字段序号,
    a.name 字段名,
    (
        case
            when COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 then '√'
            else ''
        end
    ) 标识,
    (
        case
            when (
                SELECT
                    count(*)
                FROM
                    sysobjects
                WHERE
                    (
                        name in (
                            SELECT
                                name
                            FROM
                                sysindexes
                            WHERE
                                (id = a.id)
                                AND (
                                    indid in (
                                        SELECT
                                            indid
                                        FROM
                                            sysindexkeys
                                        WHERE
                                            (id = a.id)
                                            AND (
                                                colid in (
                                                    SELECT
                                                        colid
                                                    FROM
                                                        syscolumns
                                                    WHERE
                                                        (id = a.id)
                                                        AND (name = a.name)
                                                )
                                            )
                                    )
                                )
                        )
                    )
                    AND (xtype = 'PK')
            ) > 0 then '√'
            else ''
        end
    ) 主键,
    b.name 类型,
    a.length 占用字节数,
    COLUMNPROPERTY(a.id, a.name, 'PRECISION') as 长度,
    isnull(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) as 小数位数,
    (
        case
            when a.isnullable = 1 then '√'
            else ''
        end
    ) 允许空,
    convert(varchar(200), isnull(e.text, '')) 默认值,
    convert(varchar(200), isnull(g.[value], ' ')) AS 说明
FROM
    syscolumns a
    left join systypes b on a.xtype = b.xusertype
    inner join sysobjects d on a.id = d.id
    and d.xtype = 'U'
    and d.name <> 'dtproperties'
    left join syscomments e on a.cdefault = e.id
    left join sys.extended_properties g on a.id = g.major_id
    AND a.colid = g.minor_id
    left join sys.extended_properties f on d.id = f.class
    and f.minor_id = 0
where
    d.name = 'table_name'
order by
    a.id,
    a.colorder

查看cdc

select index_name from cdc.change_tables where  capture_instance='table_name'
select * from cdc.table_name_CT
select sys.fn_cdc_map_lsn_to_time([ __ $ start_lsn ]) as versionnumber,* from cdc.table_name_CT

创建kudu表

CREATE TABLE dl_fw_kudu.kudu_table_name (
    id STRING NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
    column_name STRING NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION,
    ...
    PRIMARY KEY (id)
) PARTITION BY HASH (id) PARTITIONS 20 STORED AS KUDU

创建hive seq格式表

CREATE external TABLE tt_table_name_seq (
    column_name string COMMENT '字段名称',
    dl_etl_date string COMMENT '落数时间'
) COMMENT '中文表名' PARTITIONED BY (` pt ` string COMMENT '日期') row format delimited fields terminated by '\001' stored as sequencefile tblproperties("creator" = "创建者");

创建hive txt格式表

CREATE TABLE IF NOT EXISTS tt_table_name (
    column_name string NOT NULL COMMENT '字段名',
    dl_etl_date string comment '落数时间'
) COMMENT '中文表名' ROW FORMAT delimited fields terminated BY '\001' stored as parquet tblproperties("creator" = "创建者");

创建doris表

CREATE TABLE table_name (
    column_name string NULL COMMENT "字段名",
    dl_etl_date string NULL COMMENT "落数时间"
) ENGINE=OLAP
UNIQUE KEY(`column_name_1`)
COMMENT "中文表名"
DISTRIBUTED BY HASH(`column_name_1`) BUCKETS 3 -- 一般如果分区多,桶就小一些,一个桶100-200万数据
PROPERTIES (
"replication_num" = "3",
"in_memory" = "false",
"storage_format" = "DEFAULT",
"enable_persistent_index" = "false",
"compression" = "LZ4"
);

##
PROPERTIES (
"replication_num" = "3",
"in_memory" = "false",    -- 是否放入内存(放入内存会快些,但可能会占用存储空间)
"dynamic_partition.enable" = "true",  
"dynamic_partition.time_unit" = "MONTH",  -- 分区单位DAY,MONTH
"dynamic_partition.start" = "-24", --保存历史分区范围
"dynamic_partition.end" = "12", --提前创建历史分区范围
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "10",
"dynamic_partition.replication_num" = "3"
);
primary key:主键模型,新进的数据会根据key更新,不允许出现相同的key,适合高频更新且数据量较大的模型,占用内存,一般不轻易使用
DUPLICATE KEY:key值可重复,不支持唯一主键的场景
unique key:效果和primary key一模一样,区别是primary key性能更好,unique key不占用内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值