Я использую hive jdb c для загрузки данных из улья в мое искровое приложение.
Dataset<Row> dataset = spark.read()
.format("jdbc")
.option("url", "jdbc:hive2://<url with serviceDiscovery=zookeeper")
.option("user","<user_name>")
.option("dbtable", "((select * from schema.table_name limit 30) tbl)")
.option("fetchsize","30")
.load();
Примечание: имя schema.table состоит из столбца с именами col1, col2 и col3.
dataset.show()
Это дает мне фрейм данных с именами столбцов как tbl.col1, tbl.col2 и tbl.col3
Затем я регистрирую его временное представление.
dataset.createOrReplaceGlobalTempView("myTempTable");
Затем я запускаю свой пользовательский sql для этого myTempTable
Dataset<Row> myNewDataset = dataset.sqlContext().sql(select tbl.col1 from global_temp.myTempTable")
Но он выбрасывает ошибка:
org.apache.spark.sql.AnalysisException: cannot resolve '`tbl.col1`' given input columns: [mytemptable.tbl.col1, mytemptable.tbl.col2, mytemptable.tbl.col3]; line 1 pos 7;
'Project ['tbl.col1]
+- SubqueryAlias mytemptable
+- Relation[tbl.col1#0,tbl.col2#1,tbl.col3#2] JDBCRelation(((select * from schema.table_name limit 30) tbl)) [numPartitions=1]
Примечание: эта команда работает совершенно нормально и дает те же результаты, что и dataset.show ()
Dataset<Row> myNewDataset = dataset.sqlContext().sql(select * from global_temp.myTempTable")
Пожалуйста, помогите мне, как запустить запрос на выборку временное представление с выборочными столбцами. Это также говорит имена столбцов с двумя "." между. Я пытался использовать запрос типа «выберите myTempTable.tbl.col1 из myTempTable», но он не работает.