Inceptor上存储过程相关

      inceptor的jdbc并发数量极限不超过50个,一般20个。延迟的话,小数据量较传统数据库无优势,但是超过500G以后就比传统数据库优秀
另,高并发低延迟查询应使用hbase

分桶应该质数,1-200w条数据一个桶。对表而言,分区表比只分桶表查询快很多

unknown expression of type java.lang.String in DOT expression left side    调用时存储过程名称写错了。

存过内时间格式出错,如调用存过时时间格式YYYY-MM-DD,但是数据中是yyyymmdd导致的,这时要date再to_char更换格式。

declare声明的变量和表内的字段冲突,会优先使用变量,不要声明与会用到的字段同名的变量。

输出查看存过中的定义的变量(接在begin的变量赋值后)

DBMS_OUTPUT.PUT_LINE(V1); 

关于视图

       如果创建一个视图,create a view as select 后面特别长,那么每次使用该视图都会花很长时间。因为视图是实时的,每次使用会调用这段特长的select

关于码表(又称配置表)

      加载要快的表可以建成holdesk表。storeds as holdesk即可

关联字段写在on和where区别

 on的优先级较高

on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table_name1) 的行。

where则是在生成临时表之后使用的条件,此时已经不管是否使用了left join了,只要条件不为真的行,全部过滤掉。

所有的连接条件都必需要放在ON后面,不然前面的所有LEFT,和RIGHT关联将作为摆设,而不起任何作用。

关于其update

文档上字段关联的update使用方法如下

 UPDATE tag SET (age, gpa) = (SELECT 23, gpa FROM tg WHERE (tg.name = tag.name));

但是实际使用上无论如何调试都实现不了,现改用了merge

 MERGE INTO tag d USING

(SELECT a.name name, a.age age, g.gpa gpa FROM ta a JOIN tg g ON a.name = g.name) s

ON (s.name = d.name)

WHEN MATCHED THEN UPDATE SET age = s.age+1, gpa = 0.1+s.gpa WHERE d.age> s.age+1

WHEN NOT MATCHED THEN INSERT (name, age, gpa) VALUES (s.name, s.age, s.gpa);
不加when not matched即为update

时间增减

date(字段)+to_year_interval(-1)                                       去年同日

sunstr((date(字段)+to_year_interval(-1)),1,4)||'1231'          去年末

对月日的增减to_year_interval换成month和day即可

trunc(date, format) String 返回日期的指定格式
支持string类型的date字段按format返回特定的日期。

format='yyyy'/'yy',返回该年第一天的日 期;

format='mm',返回该月第一天;

format='dd',得到日期;

format='d',得到该周第一天的日期;(周日)

format='hh',得到精确到小时的时间;

format='mi',得到精确到分钟的时间。
举例
select trunc('2015-01-30 11:11:11','hh') from system.dual limit 1; Result: 2015-01-30 11:00:00
 

select结果相加减:

select sum(fa) from
(
  select sum(num1) as fa from table1
  union
  select sum(num2) as fa from table2
  union
  select sum(num3) as fa from table3
  union
  select 0-sum(num4) as fa from table4
  union
  select 0-sum(num5) as fa from table5
) as tmp

动态sql(将sql存为变量)

DECLARE sql_stat STRING;

set  sql_stat:='select price from transactions where acc_num=6513065';

EXECUTE IMMEDIATE  sql_stat;

END; /

传参形式

DECLARE sql_stat STRING;

set  sql_stat:='select price from transactions where acc_num=?';

EXECUTE IMMEDIATE  sql_stat  using  623101;

END; /

数据倾斜

orc事务表分桶的字段选个较为均衡的字段,比如数据日期。本项目分桶一般53桶

分桶字段不当会数据倾斜

rank排名函数

SELECT name, acc_level, rank() OVER(ORDER BY acc_level) FROM user_info;

马**  A       1

魏**  A       1

邱*    A       1

华*    B       4 

脏数据:

如chn_id=‘AE’如何都没有,但是数据库中可见。这是由于数据其实是‘AE  ’,需要trim(chn_id)

含逗号,换行符的

出现的问题

Display all 475 possibilities? (y or n)

notepad++ =>视图=>显示符号=>显示空格和制表符

time类型不可用

!set plsqClientDialect db2;

set plsql.server.dialect=db2;

!set plsqlUseSlash true;

set plsql.use.slash=true;

声明为db2,这样才可以用time类型

列出存过详细(extended关键字会列出该PL/SQL函数/过程的原文)

desc plsql function extended function_name

 建ORC事务表

事务表与非事务区别在TBLPROPERTIES ("transactional"="true")开启事务并且分桶(事务表要分桶)

非事务表不可增删改

//非分区表

CREATE TABLE <table_name>

(<column> <data_type>, <column> <data_type>, ...)

CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS

STORED AS ORC

TBLPROPERTIES ("transactional"="true");

//单值分区表(Unique Value Partition)

CREATE TABLE <table_name>

(<column> <data_type>, <column> <data_type>, ...)

PARTITIONED BY (<partition_key> <data_type>)

CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS

STORED AS ORC

TBLPROPERTIES ("transactional"="true");

//范围分区表(Range Partition)

CREATE TABLE <table_name>

(<column> <data_type>, <column> <data_type>, ...)

PARTITIONED BY RANGE(<partition_key1> <data_type>, <partition_key2> <data_type>, ...)

(PARTITION [<partition_name_1>] VALUE LESS THAN(<key1_bound_value1>, <key2_bound_value1>, ...),     

PARTITION [partition_name_2] VALUE LESS THAN(key1_bound_value2, key2_bound_value2, ...),     ... )

CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true");

字段后面有空格,要加trim()

    string类型字段后面有空格,row_number其中partition by该字段的时候,有空格字段会无效。另外,去重distinct(或group by所有字段)中有空格字段时候,无法去重,同样数据会再出现

子查询:大表用exists,小表用in
 


版权声明:本文为someInNeed原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。