2012-03-20 36 views
13

Tôi muốn chạy các câu lệnh nhưHive có cái gì tương đương với DUAL không?

SELECT date_add('2008-12-31', 1) FROM DUAL

Liệu Hive (chạy trên Amazon EMR) có một cái gì đó tương tự?

+0

Hầu hết các cơ sở dữ liệu không cần một giả như DUAL, đó là Oracle. Vì vậy, whats câu hỏi thực sự của bạn, bạn có muốn làm ngày arithmetics? – schlenk

+0

@schlenk Tôi chỉ muốn một cái gì đó để chạy các chức năng và làm gỡ lỗi từ, vì tôi không phải là rất quen thuộc với ngôn ngữ. – jbreed

Trả lời

4

Có một đẹp working solution (tốt, workaround) có sẵn trong các liên kết, nhưng nó là chậm như bạn có thể tưởng tượng.

Ý tưởng là bạn tạo một bảng có trường giả, tạo tệp văn bản có nội dung chỉ là 'X', tải văn bản đó vào bảng đó. Viola.

CREATE TABLE dual (dummy STRING); 

load data local inpath '/path/to/textfile/dual.txt' overwrite into table dual; 

SELECT date_add('2008-12-31', 1) from dual; 
13

Giải pháp tốt nhất chưa kể đến tên bảng.

select 1+1; 

Cung cấp kết quả 2. Nhưng kém Hive cần phải tạo bản đồ để tìm thấy điều này!

+0

Chưa: hive> chọn 1 + 1; FAILED: ParseException dòng 1:14 không khớp với đầu vào '' mong đợi TỪ gần '1' ở khoản – teu

+1

Bài cũ nhưng đáng nói đến là điều này được hỗ trợ trong ít nhất phiên bản 0.13 – Aaron

+0

đây là đơn giản nhất, và nó hoạt động trong các kịch bản không có quyền tạo bảng. –

5

Để tạo một bảng như kép trong tổ ong, nơi có một cột và một hàng, bạn có thể làm như sau:

create table dual (x int); 
insert into table dual select count(*)+1 as x from dual; 

Kiểm tra một biểu thức:

select split('3,2,1','\\,') as my_new_array from dual; 

Output:

["3","2","1"] 
2

Giải pháp nhanh:

Chúng tôi có thể sử dụng bảng hiện có để đạt được chức năng kép bằng cách truy vấn sau.

SELECT date_add('2008-12-31', 1) FROM <Any Existing Table> LIMIT 1 

Ví dụ:

SELECT CONCAT('kbdjj','56454') AS a, null AS b FROM tbl_name LIMIT 1 

Result

"giới hạn 1" trong truy vấn được sử dụng để tránh nhiều lần xuất hiện của giá trị quy định (kbdjj56454, null).

+0

SELECT CONCAT ('kbdjj', '56454') AS a, null AS b FROM (chọn * từ tbl_name LIMIT 1) t. Truy vấn này sẽ hiệu quả hơn –

Các vấn đề liên quan