Добавить столбец в SQL с количеством строк в Hive или BigQuery - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть таблица, такая как

with temp_table as (
select 'john1', 100
union all
select 'john2', 500
union all
select 'john3', 700
union all
select 'john4', 800
union all
select 'john5', 200
union all
select 'john6', 600
union all
select 'john7', 300
)
select * from temp_table

и данные выглядят как -

john1,100
john2,500
john3,700
john4,800
john5,200
john6,600
john7,300

Я хотел бы добавить еще один столбец в эту таблицу, в котором указано количество записей для всей таблицы. Например, текущая таблица имеет общее количество записей как 7. Поэтому мой вывод должен выглядеть примерно так -

john1,100,7
john2,500,7
john3,700,7
john4,800,7
john5,200,7
john6,600,7
john7,300,7

Какой самый эффективный способ сделать это? Можно ли этого достичь без операции join?

Примечание. Это пример данных, но на самом деле таблица может быть довольно большой (> 5 миллионов записей)

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Использование функции улья window count (*) с предложением свыше , а не будет указывать partition by and order by clauses.

  WITH temp_table AS (
  SELECT 'john1' name, 100 value UNION ALL
  SELECT 'john2', 500 UNION ALL
  SELECT 'john3', 700 UNION ALL
  SELECT 'john4', 800 UNION ALL
  SELECT 'john5', 200 UNION ALL
  SELECT 'john6', 600 UNION ALL
  SELECT 'john7', 300
   ) 
  select *,count(*) over() count from temp_table;

Выход:

+------------------+-------------------+--------+--+
| temp_table.name  | temp_table.value  | count  |
+------------------+-------------------+--------+--+
| john1            | 100               | 7      |
| john7            | 300               | 7      |
| john6            | 600               | 7      |
| john3            | 700               | 7      |
| john2            | 500               | 7      |
| john5            | 200               | 7      |
| john4            | 800               | 7      |
+------------------+-------------------+--------+--+
0 голосов
/ 04 ноября 2018

Ниже приведены примеры для BigQuery Standard SQL

#standardSQL
WITH temp_table AS (
  SELECT 'john1' name, 100 value UNION ALL
  SELECT 'john2', 500 UNION ALL
  SELECT 'john3', 700 UNION ALL
  SELECT 'john4', 800 UNION ALL
  SELECT 'john5', 200 UNION ALL
  SELECT 'john6', 600 UNION ALL
  SELECT 'john7', 300
), totals AS (
  SELECT COUNT(1) total_count FROM temp_table
)
SELECT *
FROM temp_table, totals   

или

#standardSQL
WITH temp_table AS (
  SELECT 'john1' name, 100 value UNION ALL
  SELECT 'john2', 500 UNION ALL
  SELECT 'john3', 700 UNION ALL
  SELECT 'john4', 800 UNION ALL
  SELECT 'john5', 200 UNION ALL
  SELECT 'john6', 600 UNION ALL
  SELECT 'john7', 300
)
SELECT *, (SELECT COUNT(1) FROM temp_table) total_count
FROM temp_table  

Мои предпочтения будут первыми

Оба результата ниже результата

Row name    value   total_count  
1   john1   100     7    
2   john2   500     7    
3   john3   700     7    
4   john4   800     7    
5   john5   200     7    
6   john6   600     7    
7   john7   300     7    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...