Phoenix SQL使用注意事项

1 背景

Phoenix SQL的一些语法与mysql等数据库的语法有所不同,以下是我在使用过程中遇到的一些问题。

2 问题

  1. 库名、表名、字段名都需要加双引号,否则会被自动转换为大写,造成不可预知的错误。
  2. 插入使用upsert命令,而不是insert
UPSERT INTO TEST VALUES('foo','bar',3);
UPSERT INTO TEST(NAME,ID) VALUES('foo',123);
UPSERT INTO TEST(ID, COUNTER) VALUES(123, 0) ON DUPLICATE KEY UPDATE COUNTER = COUNTER + 1;
UPSERT INTO TEST(ID, MY_COL) VALUES(123, 0) ON DUPLICATE KEY IGNORE;
  1. 没有update命令,可以采用覆盖更新。
    主键相同的数据,新插入的数据会自动覆盖原来的数据
UPSERT INTO test.targetTable(col1, col2) SELECT col3, col4 FROM test.sourceTable WHERE col5 < 100
UPSERT INTO foo SELECT * FROM bar;
  1. 字符串转数字函数TO_NUMBER
  2. 字符串拆分函数regexp_split("col",'\.')
  3. 新建表,建表的时候需要在最后加上column_encoded_bytes=0; 否则在映射到hive的时候会出错。例如:
create table "test"."test" (
"uuid"    varchar not null primary key,
"shop_id" varchar,
"shop_name"  varchar
)column_encoded_bytes=0;
  1. 已有hbase表的映射查询,直接执行建表语句,确保表名、列族和列名与原始表保持一致即可,如:
create table "test"."test_table"(
"uuid"    varchar not null primary key,
"info"."create_time"    varchar,
"info"."act_amt"    varchar,
"info"."back_order"    varchar,
"info"."buyer"    varchar,
"info"."category_num"    varchar,
"info"."comments"    varchar,
"info"."order_create_time"    varchar,
"info"."order_owner"    varchar)
column_encoded_bytes=0;

参考资料

  1. 官方文档-快速入门:https://phoenix.apache.org/Phoenix-in-15-minutes-or-less.html
  2. 官方文档-语法:https://phoenix.apache.org/language/index.html
  3. 官方文档-函数:https://phoenix.apache.org/language/functions.html
  4. 官方文档-数据类型:https://phoenix.apache.org/language/datatypes.html

你可能感兴趣的:(Phoenix SQL使用注意事项)