Получить всю запись из nth bucket в Hive sql - PullRequest
3 голосов
/ 15 октября 2019

Как получить всю запись из n-го сегмента в улье.

Выбрать * из bucketTable из сегмента 9;

Ответы [ 2 ]

5 голосов
/ 15 октября 2019

Этого можно добиться разными способами:

Подход-1: Получив таблицу stored location от desc formatted <db>.<tab_name>

Затем прочитайте файл 9th bucket непосредственно из HDFS filesystem.

(или)

Подход-2: Использование input_file_name ()

Затем фильтруйте только 9th bucket данные, используя имя файла

Example:

Approach-1:

Scala:

val df = spark.sql("desc formatted <db>.<tab_name>")

//get table location in hdfs path
val loc_hdfs = df.filter('col_name === "Location").select("data_type").collect.map(x => x(0)).mkString

//based on your table format change the read format
val ninth_buk = spark.read.orc(s"${loc_hdfs}/000008_0*")

//display the data
ninth_buk.show()

Pyspark:

from pyspark.sql.functions import *

df = spark.sql("desc formatted <db>.<tab_name>")

loc_hdfs = df.filter(col("col_name") == "Location").select("data_type").collect()[0].__getattr__("data_type")

ninth_buk = spark.read.orc(loc_hdfs + "/000008_0*")

ninth_buk.show()

Approach-2:

Scala:

 val df = spark.read.table("<db>.<tab_name>")

//add input_file_name 
 val df1 = df.withColumn("filename",input_file_name())

#filter only the 9th bucket filename and select only required columns
val ninth_buk = df1.filter('filename.contains("000008_0")).select(df.columns.head,df.columns.tail:_*)

ninth_buk.show()

pyspark:

from pyspark.sql.functions import *

 df = spark.read.table("<db>.<tab_name>")

df1 = df.withColumn("filename",input_file_name())

ninth_buk = df1.filter(col("filename").contains("000008_0")).select(*df.columns)

ninth_buk.show()

заход на посадку-2 не рекомендуетсяесли у вас есть огромные данные, поскольку нам нужно отфильтровать весь фрейм данных .. !!


In Hive:

set hive.support.quoted.identifiers=none;
select `(fn)?+.+` from (
                        select *,input__file__name fn from table_name)e 
 where e.fn like '%000008_0%';
0 голосов
/ 15 октября 2019

Если это таблица ORC

SELECT * FROM orc.<bucket_HDFS_path>
...