㈠ hive sql和mysql的關鍵詞用法有什麼不同
當然不是,hive支持jdbc和odbc數據源連接,可以連接很多種資料庫,mysql、oracle等等等等,它自己的metastore用的就是derbyDB。 具體的連接方法在官網上有說明,使用odbc需要重新編譯相關組件。hive通過jdbc連接其他資料庫的教程在google上一搜
應該是Hadoop在hbase和Hive中的作用吧。 hbase與hive都是架構在hadoop之上的。都是用hadoop作為底層存儲。而hbase是作為分布式資料庫,而hive是作為分布式數據倉庫。當然hive還是借用hadoop的MapRece來完成一些hive中的命令的執行。
㈡ hive sql 怎麼不能這樣寫啊 (mysql 是沒有問題的)
你可以先用hive或者手寫map/rece程序。建議你直接使用hive,hive也像mysql一樣可以建表。表裡的數據就是對應從本地load到hadoop上的文件,格式自己定。然後用JDBC可以像操作mysql一樣操作hive(sql語法稍有不同)
㈢ hive 怎麼添加 表注釋語法
要添加註釋,只需要用單引號』作為注釋文字的開頭。注釋符告訴Visual Basic,忽略這個符號後面的內容,這些內容就是代碼段中的注釋部分,在代碼編輯器中以綠色字元顯示。
注釋可以和語句在同一行,寫在語句的後面,也可占據一整行。
例如:
'在文本框中放歡迎詞。
Private Sub Command1_Click()
Text1. Text="Hello." '把文本框Text1的屬性設置為Hello。
End Sub
注意,不能在同一行上把注釋接在續行符後面。
㈣ hive sql里,幫我描述一個簡單的sql的原理
select a.id,a.info,b.num from a join b on a.id=b.id and where b.num>=10
兩個表做關聯,首先where會過濾掉不需要的數據。
至於表怎麼做map和rece操作,在hive里的表是虛擬的,其實還是對hdfs文件進行操作,你可以在hdfs:///user/hive/warehouse路徑下找到以表名來命名的文件,裡面就是表的內容,可以執行-cat命令查看。所以,它的map操作很簡單,就是按行讀文件,然後會根據hive的默認分隔符\001對每行進行切分。切分完成後就會按照你SQL指定的邏輯進行合並,最後再輸出成hdfs文件,只不過在hive裡面看它是以表的形式展現的。
job數會在你執行sql語句之後緊接著有相應的日誌記錄,
Total MapRece jobs = 2
Launching Job 1 out of 2
Number of rece tasks not specified. Estimated from input data size: 2
In order to change the average load for a recer (in bytes):
set hive.exec.recers.bytes.per.recer=<number>
In order to limit the maximum number of recers:
set hive.exec.recers.max=<number>
In order to set a constant number of recers:
這樣就是有兩個job,正在執行第一個job。
Hadoop job information for Stage-1: number of mappers: 5; number of recers: 2
而這個就會告訴你有多少個mapper和recer。
像你寫的這個sql有join操作,而且是hiveSQL裡面最普通的join,那麼一定會有recer參與,如果數據量很大,比如上千萬條記錄,join就會特別慢,job進度就會一直卡在rece操作。可以改成mapjoin或者sort merge bucket mapjoin。
其實hive效率不高,不適合實時查詢,即使一個表為空,用hive進行查詢也會很耗時,因為它要把sql語句翻譯成MR任務。雖然簡化了分布式編程,但是效率上就會付出代價。
你的這句sql應該會翻譯成一個JOB來執行,就是簡單地map和rece。
maprece就是按行讀文件,然後切分,合並,輸出成文件。
㈤ sql中use hive有什麼意思
USE 將資料庫上下文更改為指定資料庫。
語法
USE { database }
參數 database資料庫名
是用戶上下文要切換到的資料庫的名稱。資料庫名稱必須符合標識符的規則。
通俗說就是:下面要使用hive資料庫。
㈥ 求一個hive的sql語句。
有點不太明白你的意思,我只按照我自己的理解說了
一般hive 表應該建立一個以day(每一天,比如day=20141227,代表2014-12-27的數據)作為分區,每一天都存一個分區,這個如果想統計7天的 你可以再shell中得到今天作為變數,然後往前推7天那一天作為變數,這兩個變數就可以寫個sql
select * from tablename where day<=today and day>=sevenbeforeday
如果你想從關系型資料庫中導出七個表到hive,就每一天作為分區
㈦ hive sql有沒有控制流程的語法
1. DDL 操作
DDL操作類型
1.2 建表:
建表
•CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXIST 選項來忽略這個異常
•EXTERNAL 關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION)
•LIKE 允許用戶復制現有的表結構,但是不復制數據
•COMMENT可以為表與欄位增加描述
•ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
用戶在建表的時候可以自定義 SerDe 或者使用自帶的 SerDe。如果沒有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,將會使用自帶的 SerDe。在建表的時候,用戶還需要為表指定列,用戶在指定表的列的同時也會指定自定義的 SerDe,Hive 通過 SerDe 確定表的具體的列的數據。
•STORED AS
SEQUENCEFILE
| TEXTFILE
| RCFILE
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
如果文件數據是純文本,可以使用 STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCE 。
1.3 創建簡單表:
hive> CREATE TABLE pokes (foo INT, bar STRING);
1.4 創建外部表:
創建外部表
1.5 建分區表
分區表
1.6 建Bucket表
創建Bucket表
1.7 創建表並創建索引欄位ds
hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
1.8 復制一個空表
CREATE TABLE empty_key_value_store
LIKE key_value_store;
例子
例子
導入數據表的數據格式是:欄位之間是tab鍵分割,行之間是斷行。
及要我們的文件內容格式:
100636 100890 c5c86f4cddc15eb7 yyyvybtvt
100612 100865 97cc70d411c18b6f gyvcycy
100078 100087 ecd6026a15ffddf5 qa000100
1.9 顯示所有表:
hive> SHOW TABLES;
1.10 按正條件(正則表達式)顯示表,
hive> SHOW TABLES '.*s';
DDL類型-修改表結構
1.21 表添加一列:
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
1.22 添加一列並增加列欄位注釋
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
1.23 更改表名:
hive> ALTER TABLE events RENAME TO 3koobecaf;
1.24 刪除列:
hive> DROP TABLE pokes;
1.25 增加、刪除分區
•增加
ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ...
partition_spec:
: PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)
•刪除
ALTER TABLE table_name DROP partition_spec, partition_spec,...
1.26 重命名表
ALTER TABLE table_name RENAME TO new_table_name
1.27 修改列的名字、類型、位置、注釋:
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
這個命令可以允許改變列名、數據類型、注釋、列位置或者它們的任意組合
1.28 表添加一列:
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
1.29 添加一列並增加列欄位注釋
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
1.30 增加/更新列
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
• ADD是代表新增一欄位,欄位位置在所有列後面(partition列前)
REPLACE則是表示替換表中所有欄位。
1.31 增加表的元數據信息
ALTER TABLE table_name SET TBLPROPERTIES table_properties table_properties:
:[property_name = property_value…..]
•用戶可以用這個命令向表中增加metadata
1.31改變表文件格式與組織
ALTER TABLE table_name SET FILEFORMAT file_format
ALTER TABLE table_name CLUSTERED BY(userid) SORTED BY(viewTime) INTO num_buckets BUCKETS
這個命令修改了表的物理存儲屬性
1.4 創建/刪除視圖
CREATE VIEW [IF NOT EXISTS] view_name [ (column_name [COMMENT column_comment], ...) ][COMMENT view_comment][TBLPROPERTIES (property_name = property_value, ...)] AS SELECT
•增加視圖
•如果沒有提供表名,視圖列的名字將由定義的SELECT表達式自動生成
•如果修改基本表的屬性,視圖中不會體現,無效查詢將會失敗
•視圖是只讀的,不能用LOAD/INSERT/ALTER
•DROP VIEW view_name
•刪除視圖
1.5 創建資料庫
CREATE DATABASE name
1.6 顯示命令
㈧ hive sql的語法幫助在哪
Hive 是基於Hadoop 構建的一套數據倉庫分析系統,它提供了豐富的SQL查詢方式來分析存儲在Hadoop 分布式文件系統中的數據,可以將結構化的數據文件映射為一張資料庫表,並提供完整的SQL查詢功能,可以將SQL語句轉換為MapRece任務進行運行,通過自己的SQL 去查詢分析需要的內容,這套SQL 簡稱Hive SQL,使不熟悉maprece 的用戶很方便的利用SQL 語言查詢,匯總,分析數據。而maprece開發人員可以把己寫的mapper 和recer 作為插件來支持Hive 做更復雜的數據分析。
它與關系型資料庫的SQL 略有不同,但支持了絕大多數的語句如DDL、DML 以及常見的聚合函數、連接查詢、條件查詢。HIVE不適合用於聯機online)事務處理,也不提供實時查詢功能。它最適合應用在基於大量不可變數據的批處理作業。
HIVE的特點:可伸縮(在Hadoop的集群上動態的添加設備),可擴展,容錯,輸入格式的鬆散耦合。
Hive 的官方文檔中對查詢語言有了很詳細的描述,請參考:http://wiki.apache.org/hadoop/Hive/LanguageManual ,本文的內容大部分翻譯自該頁面,期間加入了一些在使用過程中需要注意到的事項。
1. DDL 操作
DDL
?建表
?刪除表
?修改表結構
?創建/刪除視圖
?創建資料庫
?顯示命令
建表:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
?CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXIST 選項來忽略這個異常
?EXTERNAL 關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION)
?LIKE 允許用戶復制現有的表結構,但是不復制數據
?COMMENT可以為表與欄位增加描述
?ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
用戶在建表的時候可以自定義 SerDe 或者使用自帶的 SerDe。如果沒有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,將會使用自帶的 SerDe。在建表的時候,用戶還需要為表指定列,用戶在指定表的列的同時也會指定自定義的 SerDe,Hive 通過 SerDe 確定表的具體的列的數據。
?STORED AS
SEQUENCEFILE
| TEXTFILE
| RCFILE
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
如果文件數據是純文本,可以使用 STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCE 。
創建簡單表:
hive> CREATE TABLE pokes (foo INT, bar STRING);
創建外部表:
CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
country STRING COMMENT 'country of origination')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
STORED AS TEXTFILE
LOCATION '';
建分區表
CREATE TABLE par_table(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(date STRING, pos STRING)
ROW FORMAT DELIMITED 『\t』
FIELDS TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
建Bucket表
CREATE TABLE par_table(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(date STRING, pos STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED 『\t』
FIELDS TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
創建表並創建索引欄位ds
hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
復制一個空表
CREATE TABLE empty_key_value_store
LIKE key_value_store;
例子
create table user_info (user_id int, cid string, ckid string, username string)
row format delimited
fields terminated by '\t'
lines terminated by '\n';
導入數據表的數據格式是:欄位之間是tab鍵分割,行之間是斷行。
及要我們的文件內容格式:
100636 100890 c5c86f4cddc15eb7 yyyvybtvt
100612 100865 97cc70d411c18b6f gyvcycy
100078 100087 ecd6026a15ffddf5 qa000100
顯示所有表:
hive> SHOW TABLES;
按正條件(正則表達式)顯示表,
hive> SHOW TABLES '.*s';
修改表結構
?增加分區、刪除分區
?重命名表
?修改列的名字、類型、位置、注釋
?增加/更新列
?增加表的元數據信息
表添加一列 :
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
添加一列並增加列欄位注釋
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
更改表名:
hive> ALTER TABLE events RENAME TO 3koobecaf;
刪除列:
hive> DROP TABLE pokes;
增加、刪除分區
?增加
ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ...
partition_spec:
: PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)
?刪除
ALTER TABLE table_name DROP partition_spec, partition_spec,...
重命名表
?ALTER TABLE table_name RENAME TO new_table_name
修改列的名字、類型、位置、注釋:
?ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
?這個命令可以允許改變列名、數據類型、注釋、列位置或者它們的任意組合
表添加一列 :
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
添加一列並增加列欄位注釋
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
增加/更新列
?ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
? ADD是代表新增一欄位,欄位位置在所有列後面(partition列前)
REPLACE則是表示替換表中所有欄位。
增加表的元數據信息
?ALTER TABLE table_name SET TBLPROPERTIES table_properties table_properties:
:[property_name = property_value…..]
?用戶可以用這個命令向表中增加metadata
改變表文件格式與組織
?ALTER TABLE table_name SET FILEFORMAT file_format
?ALTER TABLE table_name CLUSTERED BY(userid) SORTED BY(viewTime) INTO num_buckets BUCKETS
附上出處鏈接:http://blog.itpub.net/26613085/viewspace-1224043/
㈨ hive sql 怎麼把數據的%去掉
用以下方法解決
方法1.選中要輸入內容的單元格,點右鍵菜單選擇「設置單元 式」,也可以點「格式」選擇「單元格」 (或按CTRL+1),出現單元 式對話框,點「數字」在分類選擇「文本」,按「確定」
方法2. 在單元輸入內容時,在前面先輸入'號(英文狀態下的引號),就是:'9196/10,這樣單元格會默認為該單元為文本方式,就會完整顯示出來。
㈩ HiveSQL,SQL語句處理,怎麼實現
不是很懂你的意思,是指在(getdate()-7)的那天注冊並登錄的用戶數sumUser和在getdate()里有登錄的用戶數userNum(getdate()-7注冊並登陸的),這兩個數的比例?
select cast(case when sumUser=0 then 0 else userNum/sumUser*100 end as varchar(2))+'%' as 留存率 from
(select
count(nowlogin.openid) as userNum,
count(newlogin.openid)as sumUser
from
(select aa.openid,aa.ftime from t_login_all as aa right join t_login_new as bb on aa.openid=bb.openid and bb.ftime=getdate()-7) as nowlogin,
(select openid from t_login_new where ftime=getdate()-7) as newlogin
where nowlogin.ftime=getdate() and nowlogin.openid=newlogin.openid
) as a