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/
