demo\u read数据库中有一个配置单元表t\u事件。表有超过100000条记录。如何通过JavaAPI读取记录。
bq8i3lrv1#
实际上你不想读所有的数据。您需要将其转换并上传到某个数据库中,或者(如果数据相对较小)将其导出为通用格式(csv、json等)。您可以使用hivecli、webhcat或jdbc配置单元驱动程序转换数据。
trnvg8h32#
可以使用配置单元jdbc驱动程序连接到配置单元表。使用下面的代码进行测试或poc是可以的,但我建议您将结束表移动到hbase(检查phoenix)或mongodb,或者一些基于关系的表,这些表具有低延迟。为了获得更好的性能,您还可以在配置单元中使用动态分区或某种集群技术。你可以使用下面的代码,我还没有测试过它(把它作为一个例子)。
import java.sql.*; public class HiveDB { public static final String HIVE_JDBC_DRIVER = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static final String HIVE_JDBC_EMBEDDED_CONNECTION = "jdbc:hive://"; private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; private Statement getConnection() throws ClassNotFoundException, SQLException { Class.forName(HIVE_JDBC_DRIVER); Connection connection = DriverManager.getConnection( HIVE_JDBC_EMBEDDED_CONNECTION, "", ""); Statement statement = connection.createStatement(); return statement; } public static void main(String[] args) { HiveDB hiveDB = new HiveDB(); try { Statement statement = hiveDB.getConnection(); //print each row ResultSet resultSet = statement.executeQuery("select * from demo_read.t_event"); int columns = resultSet.getMetaData().getColumnCount(); while (resultSet.next()) { for ( int i = 0 ; i < columns; ++i) { System.out.print(resultSet.getString(i + 1) + " " ); if (i == 100) break; //print up to 100th rows } System.out.println(); } statement.close(); //close statement } catch (ClassNotFoundException e) { // } catch (SQLException e) { // } } }
2条答案
按热度按时间bq8i3lrv1#
实际上你不想读所有的数据。您需要将其转换并上传到某个数据库中,或者(如果数据相对较小)将其导出为通用格式(csv、json等)。
您可以使用hivecli、webhcat或jdbc配置单元驱动程序转换数据。
trnvg8h32#
可以使用配置单元jdbc驱动程序连接到配置单元表。使用下面的代码进行测试或poc是可以的,但我建议您将结束表移动到hbase(检查phoenix)或mongodb,或者一些基于关系的表,这些表具有低延迟。
为了获得更好的性能,您还可以在配置单元中使用动态分区或某种集群技术。你可以使用下面的代码,我还没有测试过它(把它作为一个例子)。