最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

SAP HANA 学习系列——SQL开发(5)

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-30 10:43:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

2.  创建列表和索引
  列表适用于如下一些场景:
    * 通常只是在一个或少量列上执行计算操作
    * 表在进行搜索时通常基于少量列上的值
    * 表有很多列
    * 表有很多行,并且通常进行的是列式操作(比如:聚集计算和where中字段值查找)
    * 需要很高的压缩率。


   我们来看一些列子
    --例1
    CREATE COLUMN TABLE tpch.nation
    (n_nationkey INT NOT NULL,
     n_name CHAR(25),
     n_regionkey INT,
     n_comment VARCHAR(152),
     PRIMARY KEY(n_nationkey)
    )


   --例2(分区,只适用于列表,分区键必须是主键的一部分)
   CREATE COLUMN TABLE tpch.lineitem
    (l_orderkey INT NOT NULL,l_partkey INT,
     l_suppkey INT,l_linenumber INT NOT NULL,
     l_quantity DECIMAL(10,2),l_extendedprice DECIMAL(10,2),
     l_discount DECIMAL(10,2),l_tax DECIMAL(10,2),
     l_returnflag CHAR(1),l_linestatus CHAR(1),
     l_shipdate DATE,l_commitdate DATE,l_receiptdate DATE,
     l_shipinstruct CHAR(25),l_shipmode CHAR(10),
     l_comment VARCHAR(44),
     PRIMARY KEY INVERTED VALUE (l_orderkey,l_linenumber)
    )
    PARTITION BY HASH (l_orderkey,l_linenumber) PARTITIONS 4,
    RANGE (l_shipdate) (   
       PARTITION '2011/01/01'<= VALUES <'2011/04/01',
       PARTITION '2011/04/01'<= VALUES <'2011/07/01',
       PARTITION '2011/07/01'<= VALUES <'2011/10/01',
       PARTITION OTHERS)  
     
    注意:对于HANA来说,行表不支持分区,只有列表支持。列表的一个分区最多支持21亿条记录,为了在列表中存放更多的记录,需要使用分区。


    在上面的创建列表的例子中,我们指定的“UNIQUE”或“PRIMARY KEY”约束,HANA会自动创建相应的索引。这些索引分为两种类型(仅适用于列表)
       *  INVERTED  VALUE     适合于范围查询或like查询
       *  INVERTED  HASH      使用HASH对组合唯一键或组合主键进行编码和压缩。对于等值查询(点查询),这种索引类型具有更好的性能;并且能够减少组合主键存储使用的内存数量。
  

    如果不指定,缺省是 INVERTED  VALUE。上面的INVERTED VALUE和INVERTED HASH 仅在UNIQUE和PRIMARY KEY约束中使用。下面是指定的示例
        PRIMARY KEY INVERTED VALUE (l_orderkey,l_linenumber)
        PRIMARY KEY INVERTED HASH (l_orderkey,l_linenumber)

        UNIQUE INVERTED VALUE (l_orderkey,l_linenumber)
        UNIQUE INVERTED HASH (l_orderkey,l_linenumber)


    创建列表上的索引

    列表的主键或唯一键定义的索引是主索引。在列表上还可以创建辅助索引。创建索引的基本语法如下:

         CREATE  INDEX <index_name> ON <table_name> (….) ….

    下面是一个示例:

         CREATE INDEX idx_phone ON tpch.customer(c_phone)


3.  列表的延迟加载和预加载 (行表不支持)

  SAP HANA 缺省情况下对列表采用的是延迟载机制。如果想在SAP HANA实例启动过程中对指定的列表数据进行加载,那么可以对表进行预加载设置。

  示例1:

      ALTER TABLE EMP PRELOAD ALL;   --预加载所有列的所有数据

  示例2:

      ALTER TABLE EMP PRELOAD (EMPNO,ENAME); --预加载指定的列

  示例3:

      ALTER TABLE EMP PRELOAD NONE –清除表中所有字段的预加载标志

  使用下面的查询可以查看表或字段的预加载标志:
   SELECT IS_PRELOAD FROM SYS.TABLES WHERE TABLE_NAME=‘LINEITEM’
   SELECT PRELOAD from SYS.TABLE_COLUMNS  WHERE TABLE_NAME=‘LINEITEM'


  4.  列表的加载和卸载
  可以把指定的表从内存中卸载,释放其占用的内存。也可以把已经卸载的表重新转载的内存中。只能对COLUMN TABLE进行这些操作
  示例1:
     UNLOAD  tpch.lineitem;  
  示例2:
     LOAD  tpch.customer DELTA ; --把列表的delta部分加载到内存
          LOAD  tpch.customer ALL;      --把列表所有部分,包括delta加载到内存


  5. 行表列表之间的转换
  HANA支持行表转换为列表,或者列表转换为行表。示例如下:
     ALTER TABLE accounts COLUMN THREADS 10 BATCH 10000  --行转列
     ALTER TABLE accounts  ROW THREADS 10   --列表转为行表



楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-5 12:49

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表