insertinto(tablename)总是在配置单元的默认数据库中保存dataframe

x6yk4ghg  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(770)

嗨,我在我的配置单元中有2个表,我从第一个表中选择数据创建Dataframe,并将该Dataframe以orc格式保存到另一个表中。我在同一个数据库中创建了这两个表。当我将这个Dataframe保存到第二个表中时,我在数据库问题中找不到表。如果我不使用任何数据库名,那么它总是在配置单元默认数据库中创建和保存我的df。有人能告诉我为什么它不使用用户定义的数据库,而总是使用默认数据库吗?下面是我使用的代码,我也在用hdp。

//creating hive session
    val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(sparksession).build()
    hive.setDatabase("dbname")
    var a= "SELECT 'all columns' from  dbname.tablename"
    val a1=hive.executeQuery(a)
    a1.write
    .format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector")
    .option("database", "dbname")
    .option("table", "table_name")
    .mode("Append")
    .insertInto("dbname.table_name")

如果我使用insertinto(table\u name),那么它是在默认数据库中保存dataframe,而不是insertinto(dbname.table\u name)。但如果我给dbname.tablename,那么它的显示表在数据库中找不到。我也尝试过同样的使用dbsession。

val dbSession = HiveWarehouseSession.session(sparksession).build()
    dbSession.setDatabase("dbname")

注意:我的第二个表(我在其中写入数据的目标表)是一个分区和带扣的表。

plicqrtu

plicqrtu1#

// 2. 分区依据(…)

{    a1.write
 .format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector")
 .option("database", "dbname")
 .option("table", "table_name")
 .mode("Append")
 .insertInto("dbname.table_name")
 // My second table(target table where I'm writing data) is a partitioned and bucketed table. add .partitionBy(<list cols>)

}

相关问题