每当我使用hivecli并执行一些查询时,都会得到一个“ok”或错误,而不是查看表。我理解这可能是因为许多表非常大,但是如果我只想在数据的子集上测试代码/逻辑,如何查看整个表的结果以确保正确性?
hive> select * from input; OK Time taken: 0.085 seconds
efzxgjgh1#
我猜你的表后面没有数据。您是否创建了一个表,却忘记将文件放在正确的hdfs目录中。执行以下操作:
hive> describe formatted my_table;
然后查看上面给出的hdfs文件位置:
hive> !hadoop fs -ls /location/obtained/from/describe/command
你应该看看你的档案。如果没有,请确保将文件放在该目录中,然后再次尝试查询。如果没有,请执行-put或-cp将文件移动到该位置。测试代码如果要测试某个简单表达式,可以执行以下操作:要在配置单元中创建一个类似dual的表,其中有一列和一行,可以执行以下操作:
create table dual (x int); insert into table dual select count(*)+1 as x from dual;
像在sql中一样在此表上测试表达式:
select split('3,2,1','\\,') as my_new_array from dual;
除此之外,在前面提到的数据子集上测试结果是一个好主意。然后,您可以将数据打印到文本文件中,也可以轻松地打印到excel文件或其他格式中,这些格式是您在完成所需的任何其他转换并查看结果后可能更喜欢的格式:
--grab a subset of the table CREATE TABLE my_table_subset like my_table; Insert overwrite table my_table_subset select * from my_table tablesample (1 PERCENT) t;
如果你不喜欢一个随机的子集,你将不得不构建一个查询来定位你喜欢的子集。然后将其打印为您喜欢的文件格式,如上所述:
hive -e "select * from my_table_subset limit 1000" > /localfileystem/path/myexcel.xls;
excel作为一个文件查看器可能有局限性,所以其他东西可能更可取。。。当数据变得非常大时,就会出现问题。你可能需要像ultraedit之类的软件。祝你好运!希望这有帮助。
bgibtngc2#
据我所知,您的表没有任何数据,这就是为什么它不会出现的原因。一般来说,'select*'会显示数据,而不管数据大小如何select*'命令基本上相当于一个“cat”命令,与表的大小无关。如果您想处理数据的一个子集,最好是创建一个分区。如果您的数据是以分区不可能的方式存储的,那么我建议您创建一个包含1000-2000行的临时表,并尝试对其进行查询。
2条答案
按热度按时间efzxgjgh1#
我猜你的表后面没有数据。您是否创建了一个表,却忘记将文件放在正确的hdfs目录中。执行以下操作:
然后查看上面给出的hdfs文件位置:
你应该看看你的档案。如果没有,请确保将文件放在该目录中,然后再次尝试查询。如果没有,请执行-put或-cp将文件移动到该位置。
测试代码
如果要测试某个简单表达式,可以执行以下操作:要在配置单元中创建一个类似dual的表,其中有一列和一行,可以执行以下操作:
像在sql中一样在此表上测试表达式:
除此之外,在前面提到的数据子集上测试结果是一个好主意。然后,您可以将数据打印到文本文件中,也可以轻松地打印到excel文件或其他格式中,这些格式是您在完成所需的任何其他转换并查看结果后可能更喜欢的格式:
如果你不喜欢一个随机的子集,你将不得不构建一个查询来定位你喜欢的子集。然后将其打印为您喜欢的文件格式,如上所述:
excel作为一个文件查看器可能有局限性,所以其他东西可能更可取。。。当数据变得非常大时,就会出现问题。你可能需要像ultraedit之类的软件。祝你好运!希望这有帮助。
bgibtngc2#
据我所知,您的表没有任何数据,这就是为什么它不会出现的原因。一般来说,'select*'会显示数据,而不管数据大小如何select*'命令基本上相当于一个“cat”命令,与表的大小无关。
如果您想处理数据的一个子集,最好是创建一个分区。如果您的数据是以分区不可能的方式存储的,那么我建议您创建一个包含1000-2000行的临时表,并尝试对其进行查询。