HANA常用語法整理


1、SQL

--1.查看當前日期
SELECT CURRENT_DATE "DATE" FROM DUMMY; 
--查看當前日期零時零分
SELECT TO_TIMESTAMP(TO_CHAR(CURRENT_TIMESTAMP,'YYYY-MM-DD')) FROM DUMMY;
SELECT CURRENT_DATE FROM DUMMY;
--2.查找雇員的姓名及雇員的年薪。P1526659201為SCHEMA
SELECT ENAME,SAL*12 FROM  P1526659201.EMP;  
--3.像ORACLE一樣任何含空值的數學表達式是空值:
SELECT ENAME,SAL*12+COMM  FROM  P1526659201.EMP;
--4.其中||相當於把SAL全部轉換成字符串
SELECT ENAME||SAL FROM EMP; 
--5.表示字符串的方法
SELECT ENAME||' ENAME' FROM  EMP; 
--6.如果字符串中包含有' 用''替換它
SELECT ENAME||''' ENAME' FROM EMP; 
--7.取出EMP表的前5條記錄
SELECT TOP 5 * FROM EMP; 
--8.取出EMP表的全部記錄
SELECT ALL * FROM EMP; 
--9.去除兩個字段重復的數據
SELECT DISTINCT DEPTNO,JOB FROM EMP;
--10.取ASCII碼
SELECT ASCII('ANT') "ASCII" FROM DUMMY;

2、SCHEMA

--創建SCHEMA.
--語法:
CREATE SCHEMA <SCHEMA_NAME> [OWNED BY <USER_NAME>]
/*OWNED BY:指定SCHEMA的擁有者,如果省略。當前用戶將是這個SHEMA的擁有者*/
CREATE SCHEMA MY_SCHEMA;
CREATE SCHEMA MY_SCHEMA OWNED BY SYSTEM.
--刪除SCHEMA:
--語法:
DROP SCHEMA <SCHEMA_NAME> [<DROP_OPTION>]
DROP_OPTION: CASCADE | RESTRICT
/*默認的DROP_OPTION為:RESTRICT(限制約束)
RESTRICT:直接刪除沒有依賴的對象,如果對象有依賴關系,會拋出錯誤信息。
CASCADE:直接刪除所有對象。*/
CREATE SCHEMA MY_SCHEMA;
CREATE TABLE MY_SCHEMA.T (A INT);
DROP SCHEMA MY_SCHEMA CASCADE;
SELECT * FROM TABLES  WHERE SCHEMA_NAME='P1526659201'  --查詢SCHEMA:P1526659201下的所有表

3、TABLE

/*行表適用於如下一些場景:
     * 一次處理一條記錄的情況
     * 應用需要訪問完整記錄或記錄的大部分(即一條記錄中的所有字段或大多數字段)
     * 不需要壓縮率
     * 沒有或很少的聚集、分組等復雜操作
     * 表中的記錄行數不是很多
*/
--下面是創建行表的一些列子:
--例1
CREATE TABLE ACCOUNTS
    ( ACT_NO CHAR(18),
      ACT_NAME NVARCHAR(100),
      BALANCE DECIMAL(15,2),
      PRIMARY KEY (ACT_NO)
    );
--例2
CREATE TABLE R
    (A INT PRIMARY KEY,
     B NVARCHAR(10)
    );
CREATE TABLE F 
    (FK INT, B NVARCHAR(10),
     UNIQUE (FK, B),
     FOREIGN KEY(FK) REFERENCES R ON UPDATE CASCADE
    )  NO LOGGING;
/*依據某個已經存在的表創建另外的新表。HANA SQL提供了兩類方法*/:
--方法一:創建的表與源表數據類型、約束完全相同。例如:
CREATE TABLE T_ACCOUNTS LIKE ACCOUNTS WITH NO DATA
--方法二:創建的表字段類型和NULL/NOT NULL屬性相同
CREATE TABLE T_ACCOUNTS1 AS (SELECT * FROM  ACCOUNTS) WITH DATA
/*列表適用於如下一些場景:
    * 通常只是在一個或少量列上執行計算操作
    * 表在進行搜索時通常基於少量列上的值
    * 表有很多列
    * 表有很多行,並且通常進行的是列式操作(比如:聚集計算和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查看特定表的分區情況
SELECT * FROM SYS.M_CS_PARTITIONS WHERE TABLE_NAME =  'TABLE_NAME';
--HANA支持行表轉換為列表,或者列表轉換為行表。示例如下:
ALTER TABLE ACCOUNTS COLUMN THREADS 10 BATCH 10000  --行轉列
ALTER TABLE ACCOUNTS  ROW THREADS 10   --列表轉為行表

4、INDEX

--SAP HANA的索引都是保存在內存中。
--創建索引:
--語法:CREATE [UNIQUE] [BTREE | CPBTREE] INDEX <INDEX_NAME> ON <TABLE_NAME> (<COLUMN_NAME_ORDER>, ...) [ASC | DESC]
--創建測試表:
CREATE ROW TABLE TEST_INDEX (ID INT,NAME NVARCHAR(10), REMARK NVARCHAR(10));
CREATE INDEX INDEXTEST1 ON TEST_INDEX(NAME);
CREATE CPBTREE INDEX INDEXTEST2 ON TEST_INDEX(ID, NAME DESC);
--創建唯一鍵索引:
CREATE UNIQUE INDEX INDEXTEST4 ON TEST_INDEX(ID);
CREATE UNIQUE INDEX INDEXTEST3 ON TEST_INDEX(NAME,REMARK);
--刪除索引:
DROP INDEX <INDEX_NAME>
DROP INDEX INDEXTEST2;刪除索引INDEXTEST2
--查詢索引:
SELECT * FROM INDEXES WHERE TABLE_NAME ='EMP';  --查詢員工表中使用的索引
SELECT * FROM INDEX_COLUMNS  WHERE TABLE_NAME ='EMP'; --查詢索引列
SELECT * FROM M_RS_INDEXES  WHERE TABLE_NAME = 'EMP' ;--查詢索引的統計信息(B-TREE AND CPB-TREE)
SELECT * FROM FULLTEXT_INDEXES WHERE TABLE_NAME = 'EMP'; --查詢FULLTEXT 索引
SELECT * FROM M_FULLTEXT_QUEUES; --查看FULLTEXT 索引隊列的狀態

  轉自:http://blog.itpub.net/69923980/viewspace-2676571/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM