hive導入sql
1. Sqoop將Hive表中數據導入Mysql中,進程死住,不執行該怎麼辦
我也碰到同樣問題,測試場景:
MYSQL有主鍵約束,而HIVE數據重復,HIVE到MYSQL過程中出現僵死(未查看詳細日誌,必然報SQL錯誤),最後手動殺掉執行進程的。
此現象直接導致程序無法結束(也會因為可能存在異常而去實時檢測LOG),如果在執行過程中產生異常時SQOOP能自動退出、或獲取錯誤堆棧就好了,可惜啊
2. 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/
3. 如何用hive api導入數據
注意:這個文件的路徑是要在開啟以下命令的機器上
[hadoop@Hadoop-10-1 hive]$ bin/hive --service hiveserver &
否則,執行時會出現文件路徑不存在的情況:
HiveServerException(message:Query returned non-zero code: 40000, cause:
FAILED: SemanticException Line 1:23 Invalid path ''/data/mf/hzip/tmp/gamecoins'':
No files matching path file:/data/mf/hzip/tmp/gamecoins, errorCode:40000, SQLState:42000)
4. hive sql 保留中文
在通過終端查詢hive時,終端結果顯示為亂碼,想必大家都遇到過這種情況。這種情況出現的原因是:hive在將數據寫入hdfs時候,會把數據格式轉換為utf-8格式的。如果你導入hive表的源數據不是utf-8格式的,hive在進行寫hdfs轉換格式的時候會出現亂碼,所有你查詢出來的中文也是亂碼。
解決辦法如下:
1、把源文件,用editplus等編輯軟體打開,將文件轉換為urf-8格式,保存。再重新導入到hive表中,問題解決。
2、源文件只要是文本格式,如csv,txt,log等文本格式,均可用此種方法轉化。前提是你終端也要設置為utf-8格式。
5. 如何把sql server中的數據導入hive,再導入hbase-CSDN論壇
如何把sql server中的數據導入hive,再導入hbase-CSDN論壇
方法有兩種: 1.一種是通過Java,直接讀取數據,然後在插入hive中 2.第二種是整合hbase,hive。 整合後,再創建一個表,然後將數據導入新建的hive表中
6. hql語句怎麼寫向Hive中一次插入一條數據或一個欄位的值,類似關系型資料庫的sql語句
目前我知道的方法是把你希望添加的數據寫入到文本中,然後從文本導入到你的表格中。
但是,hive不知道oracle的insert into , update。
load data [local] inpath 'yourfile_location' [overwrite] into your_table;
7. 如何把hive導出到本地的表導入mysql中
MySQL命令行導出資料庫:
1,進入MySQL目錄下的bin文件夾:cd MySQL中到bin文件夾的目錄
如我輸入的命令行:cd C:\Program Files\MySQL\MySQL Server 4.1\bin
(或者直接將windows的環境變數path中添加該目錄)
2,導出資料庫:mysqlmp -u 用戶名 -p 資料庫名 > 導出的文件名
如我輸入的命令行:mysqlmp -u root -p news > news.sql (輸入後會讓你輸入進入MySQL的密碼)
(如果導出單張表的話在資料庫名後面輸入表名即可)
3、會看到文件news.sql自動生成到bin文件下
命令行導入資料庫:
1,將要導入的.sql文件移至bin文件下,這樣的路徑比較方便
2,同上面導出的第1步
3,進入MySQL:mysql -u 用戶名 -p
如我輸入的命令行:mysql -u root -p (輸入同樣後會讓你輸入MySQL的密碼)
4,在MySQL-Front中新建你要建的資料庫,這時是空資料庫,如新建一個名為news的目標資料庫
5,輸入:mysql>use 目標資料庫名
如我輸入的命令行:mysql>use news;
6,導入文件:mysql>source 導入的文件名;
如我輸入的命令行:mysql>source news.sql;
8. 求教Hive使用UDF將查詢結果導入MySQL中,為什麼總是多出兩條記錄
for i in `cat hive.txt`;do mysql -uroot -p passwd -e "show databases;" (-e 裡面就是你所執行的sql語句)done
9. 如何實現將數據hive與sqlserver互導
可以在MicrosoftSQLServer實例和用戶指定格式的數據文件間大容量復制數據。
使用bcp實用工具可以將大量新行導入SQLServer表,或將表數據導出到數據文件。
除非與queryout選項一起使用,否則使用該實用工具不需要了解Transact-SQL知識。
若要將數據導入表中,必須使用為該表創建的格式文件,或者必須了解表的結構以及對於該表中的列有效的數據類型。
10. mysql導入到hive hdfs上顯示又數據了 hive表裡面什麼都沒有
hdfs顯示但是hive裡面沒有的話,很可能hive配置使用的是自帶的deby資料庫。hive的配置文件弄好,如果用sqoop的話,把hive的配置文件hive-site.sh拷貝一份到sqoop的conf目錄下,讓sqoop知道保存的數據是到mysql元資料庫的hive。