日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Phoenix 关联hbase表历史数据

發布時間:2024/8/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Phoenix 关联hbase表历史数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Phoenix 基本使用

進入Phoenix

phoenix-sqlline.py 10.248.161.18:2181:/hbase

?或者進入目錄下執行

cd /opt/cloudera/parcels/APACHE_PHOENIX/bin

關聯Hbase原有表

  • 創建Hbase表,列簇為 cf1 , cf2
create 'phoenix_hbase_test','cf1','cf2'
  • 插入測試數據
put 'phoenix_hbase_test', 'key1','cf1:name','zhangsan' put 'phoenix_hbase_test', 'key1','cf2:age','18' put 'phoenix_hbase_test', 'key2','cf1:name','lisi' put 'phoenix_hbase_test', 'key2','cf2:age','26' put 'phoenix_hbase_test', 'key3','cf1:name','chenwu' put 'phoenix_hbase_test', 'key4','cf2:age','10'
  • 查看

  • ?創建Phoenix表關聯

在Phoenix執行

create table "phoenix_hbase_test"("rowkey" varchar primary key, "cf1"."name" varchar , "cf2"."age" varchar) column_encoded_bytes=0;

或者創建視圖(可以理解為視圖是hive的外部表,table是內部表,刪除內部表hbase表也會刪除,刪除視圖hbase表還存在)

create view "phoenix_hbase_test"("rowkey" varchar primary key, "cf1"."name" varchar , "cf2"."age" varchar) ;

?

注意:

? ? ? ? 這里這里在Phoenix后面有column_encoded_bytes=0;? 意思是禁用對字段值進行壓縮編碼(4.10)后的新特性,如果不加會查詢會無數據,具體可參考:

  • 查詢數據?
0: jdbc:phoenix:xxxx:2181:/hbase> select * from "phoenix_hbase_test"; +---------+-----------+------+ | rowkey | name | age | +---------+-----------+------+ | key1 | zhangsan | 18 | | key2 | lisi | 26 | | key3 | chenwu | | | key4 | | 10 | +---------+-----------+------+ 4 rows selected (0.025 seconds)
  • Phoenix插入數據?并查看內容
0: jdbc:phoenix:xxx:2181:/hbase> upsert into "phoenix_hbase_test"("rowkey","cf1"."name","cf2"."age") values('key5','shazi','66'); 1 row affected (0.007 seconds) 0: jdbc:phoenix:xxx:2181:/hbase> select * from "phoenix_hbase_test"; +---------+-----------+------+ | rowkey | name | age | +---------+-----------+------+ | key1 | zhangsan | 18 | | key2 | lisi | 26 | | key3 | chenwu | | | key4 | | 10 | | key5 | shazi | 66 | +---------+-----------+------+ 5 rows selected (0.021 seconds)

如果是視圖的場景下,是無法upsert into ,只能通過hbase put添加數據?

0: jdbc:phoenix:xxx:2181:/hbase> upsert into "phoenix_hbase_test"("rowkey","cf1"."name","cf2"."age") values('key5','shazi','66'); Error: ERROR 505 (42000): Table is read only. (state=42000,code=505) org.apache.phoenix.schema.ReadOnlyTableException: ERROR 505 (42000): Table is read only.at org.apache.phoenix.compile.UpsertCompiler.compile(UpsertCompiler.java:359)at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:784)at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:770)at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:401)at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:391)at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:389)at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378)at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1825)at sqlline.Commands.execute(Commands.java:822)at sqlline.Commands.sql(Commands.java:732)at sqlline.SqlLine.dispatch(SqlLine.java:813)at sqlline.SqlLine.begin(SqlLine.java:686)at sqlline.SqlLine.start(SqlLine.java:398)at sqlline.SqlLine.main(SqlLine.java:291)

視圖有以下幾點限制

1.只有通過VIEW進行更新時,才能維護VIEW上的INDEX。通過底層TABLE或父VIEW進行的更新不會反映在索引(PHOENIX-1499)中。 2.如果主鍵列的主鍵約束以可變長度列(PHOENIX-2157)結尾,則主鍵列不能添加到VIEW中。 3.VIEW可以通過簡單的SELECT *查詢僅在單個表上定義。您不能在多個連接的表格或聚合(PHOENIX-1505,PHOENIX-1506)上創建VIEW 。 4.當一個列添加到VIEW時,新列不會自動添加到任何子視圖(PHOENIX-2054)。解決方法是手動將該列添加到子視圖。 5.所有列在創建時都必須投影到VIEW中(即僅支持CREATE VIEW ... AS SELECT *)。但是,請注意,在通過ALTER VIEW命令創建后,您可以在VIEW中刪除從基表繼承的非主鍵列。在未來的版本(PHOENIX-1507)中支持在SELECT子句中提供列和或表達式的子集。

?

?

?

總結

以上是生活随笔為你收集整理的Phoenix 关联hbase表历史数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。