Сегодня мы очень рады объявить о последней версии Apache Drill, 1.2,) в составе дистрибутива MapR. Пакеты Drill 1.2 для MapR можно скачать http://doc.mapr.com/display/MapR/Apache+Drill+on+MapR
Вы можете поэкспериментировать с выпуском, используя песочницу MapR и различные практические руководства по адресу https://www.mapr.com/products/mapr-sandbox-hadoop/download-sandbox-drill.
Apache Drill набирает значительную популярность среди пользователей и поддерживает сообщество с момента его первой доступности бета-версии (Sep’14). Многочисленные клиенты развернули и используют Drill в производстве, и они находят Drill чрезвычайно ценным в своих средах с различными вариантами использования, такими как исследование данных, запросы Adhoc / BI на озере данных Hadoop и аналитика данных JSON.
Общедоступная версия Drill 1.0 была выпущена в мае 15 года, а затем Drill 1.1 в начале июля 15 года. Каждый из этих выпусков добавляет существенные новые функции к интерактивным функциям самообслуживания Drill, позволяющим исследовать данные и выполнять запросы SQL, и делает их готовыми к масштабированию и управляемости. Drill 1.2 расширяет фундамент и поднимает планку благодаря расширенной поддержке SQL, более глубокой интеграции Hive и улучшениям производительности. Drill 1.2 содержит более 250 исправлений ошибок и несколько новых улучшений, включая следующие.
- Новые функции ANSI SQL Analytic / Window — Lead / Lag, First_Value / Last_Value, NTile
- Оптимизированные возможности чтения в таблицах Hive
- Поддержка нескольких версий Hive
- Кэширование метаданных для улучшения производительности запросов на больших # паркетных файлах
- Улучшено нажатие клавиш в таблицах HBase / MapR-DB
- Безопасность веб-интерфейса Drill
- Команда удаления таблицы
- Улучшения обработки памяти
В этой записи блога я хотел бы кратко представить новые аналитические возможности, добавленные в Drill, а именно: ANSI SQL-совместимые аналитические и оконные функции, и как с ними начать. Оконные функции SQL в Drill включают поддержку предложений PARTITION BY и OVER, разнообразные агрегированные оконные функции для Sum, Max, Min, Count, Avg и аналитические функции, такие как First_Value, Last_Value, Lead, Lag, NTile, Row_Number, Rank. Оконные функции очень универсальны и позволяют пользователям сокращать объединения, подзапросы, явные курсоры, которые должны быть написаны и подогнаны естественным образом для решения различных вариантов использования без больших усилий по написанию кода.
В моих предыдущих статьях « Превращая необработанные данные в реальное понимание и работая с высокодинамичными наборами данных» , я продемонстрировал различные возможности запросов в Drill, используя демонстрационный набор данных бизнес-обзоров от Yelp. Этот пост продолжает использовать тот же набор данных для демонстрации аналитических / оконных функций.
Во-первых, давайте запустим Drill во встроенном режиме (также можно использовать распределенный режим)
1
2
3
4
5
6
|
NRentachintala-MAC:bin nrentachintala$ ./drill-embedded Java HotSpot(TM) 64 -Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0 Oct 19 , 2015 9 : 20 : 03 AM org.glassfish.jersey.server.ApplicationHandler initialize INFO: Initiating Jersey application, version Jersey: 2.8 2014 - 04 - 29 01 : 25 : 26 ... apache drill 1.2 . 0 "a drill in the hand is better than two in the bush" |
Перечислите доступные схемы в Drill.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
0 : jdbc:drill:zk=local> show schemas; +---------------------+ | SCHEMA_NAME | +---------------------+ | INFORMATION_SCHEMA | | cp. default | | dfs. default | | dfs.root | | dfs.tmp | | dfs.yelp | | sys | +---------------------+ 7 rows selected ( 1.755 seconds) |
Переключитесь на использование рабочей области, в которую загружаются данные Yelp.
1
2
3
4
5
6
7
8
|
0 : jdbc:drill:zk=local> use dfs.yelp; +-------+---------------------------------------+ | ok | summary | +-------+---------------------------------------+ | true | Default schema changed to [dfs.yelp] | +-------+---------------------------------------+ 1 row selected ( 0.129 seconds) |
Давайте начнем с изучения одного из наборов данных, доступных в наборе данных Yelp — бизнес-информации
1
2
3
4
5
6
7
8
9
|
0 : jdbc:drill:zk=local> select * from `business.json` limit 1 ; +-------------+--------------+-------+------+------------+------+--------------+------+-----------+-------+-------+----------+------------+------+---------------+ | business_id | full_address | hours | open | categories | city | review_count | name | longitude | state | stars | latitude | attributes | type | neighborhoods | +-------------+--------------+-------+------+------------+------+--------------+------+-----------+-------+-------+----------+------------+------+---------------+ | vcNAWiLM4dR7D2nwwJ7nCA | 4840 E Indian School Rd Ste 101 Phoenix, AZ 85018 | { "Tuesday" :{ "close" : "17:00" , "open" : "08:00" }, "Friday" :{ "close" : "17:00" , "open" : "08:00" }, "Monday" :{ "close" : "17:00" , "open" : "08:00" }, "Wednesday" :{ "close" : "17:00" , "open" : "08:00" }, "Thursday" :{ "close" : "17:00" , "open" : "08:00" }, "Sunday" :{}, "Saturday" :{}} | true | [ "Doctors" , "Health & Medical" ] | Phoenix | 7 | Eric Goldberg, MD | - 111.983758 | AZ | 3.5 | 33.499313 | { "By Appointment Only" : true , "Good For" :{}, "Ambience" :{}, "Parking" :{}, "Music" :{}, "Hair Types Specialized In" :{}, "Payment Types" :{}, "Dietary Restrictions" :{}} | business | [] | +-------------+--------------+-------+------+------------+------+--------------+------+-----------+-------+-------+----------+------------+------+---------------+ 1 row selected ( 0.514 seconds) |
Теперь давайте рассмотрим использование нескольких оконных функций Drill.
Во-первых, просто найдите лучшие компании Yelp на основе # отзывов в каждом городе вместе с номером строки.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
0: jdbc:drill:zk= local > SELECT name , city, review_count,row_number() . . . . . . . . . . . > OVER (PARTITION BY city ORDER BY review_count DESC ) as rownum . . . . . . . . . . . > FROM `business.json` limit 15; + ----------------------------------------+------------+---------------+---------+ | name | city | review_count | rownum | + ----------------------------------------+------------+---------------+---------+ | Cupz N ' Crepes | Ahwatukee | 124 | 1 | | My Wine Cellar | Ahwatukee | 98 | 2 | | Kathy' s Alterations | Ahwatukee | 12 | 3 | | McDonald 's | Ahwatukee | 7 | 4 | | U-Haul | Ahwatukee | 5 | 5 | | Hi-Health | Ahwatukee | 4 | 6 | | Healthy and Clean Living Environments | Ahwatukee | 4 | 7 | | Active Kids Pediatrics | Ahwatukee | 4 | 8 | | Roberto' s Authentic Mexican Food | Anthem | 117 | 1 | | Q to U BBQ | Anthem | 74 | 2 | | Outlets At Anthem | Anthem | 64 | 3 | | Dara Thai | Anthem | 56 | 4 | | Cafe Provence | Anthem | 53 | 5 | | Shanghai Club | Anthem | 50 | 6 | | Two Brothers Kitchen | Anthem | 43 | 7 | + ----------------------------------------+------------+---------------+---------+ 15 rows selected (0.67 seconds) |
Посмотрите, как количество # отзывов по каждому бизнесу сравнивается со средним количеством # отзывов по всему бизнесу в городе.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
0: jdbc:drill:zk= local > SELECT name , city,review_count, . . . . . . . . . . . > Avg (review_count) OVER (PARTITION BY City) AS city_reviews_avg . . . . . . . . . . . > FROM `business.json`limit 15; + ----------------------------------------+------------+---------------+---------------------+ | name | city | review_count | city_reviews_avg | + ----------------------------------------+------------+---------------+---------------------+ | Hi-Health | Ahwatukee | 4 | 32.25 | | My Wine Cellar | Ahwatukee | 98 | 32.25 | | U-Haul | Ahwatukee | 5 | 32.25 | | Cupz N ' Crepes | Ahwatukee | 124 | 32.25 | | McDonald' s | Ahwatukee | 7 | 32.25 | | Kathy 's Alterations | Ahwatukee | 12 | 32.25 | | Healthy and Clean Living Environments | Ahwatukee | 4 | 32.25 | | Active Kids Pediatrics | Ahwatukee | 4 | 32.25 | | Anthem Community Center | Anthem | 4 | 14.492063492063492 | | Scrapbooks To Remember | Anthem | 4 | 14.492063492063492 | | Hungry Howie' s Pizza | Anthem | 7 | 14.492063492063492 | | Pinata Nueva | Anthem | 3 | 14.492063492063492 | | Starbucks Coffee Company | Anthem | 13 | 14.492063492063492 | | Pizza Hut | Anthem | 6 | 14.492063492063492 | | Rays Pizza | Anthem | 19 | 14.492063492063492 | + ----------------------------------------+------------+---------------+---------------------+ 15 rows selected (0.395 seconds) |
Проверьте, как #reviews для каждого бизнеса способствуют общему количеству отзывов для всех предприятий в городе.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
0: jdbc:drill:zk= local > SELECT name , city,review_count, . . . . . . . . . . . > Sum (review_count) OVER (PARTITION BY City) AS city_reviews_sum . . . . . . . . . . . > FROM `business.json`limit 15; + ----------------------------------------+------------+---------------+-------------------+ | name | city | review_count | city_reviews_sum | + ----------------------------------------+------------+---------------+-------------------+ | Hi-Health | Ahwatukee | 4 | 258 | | My Wine Cellar | Ahwatukee | 98 | 258 | | U-Haul | Ahwatukee | 5 | 258 | | Cupz N ' Crepes | Ahwatukee | 124 | 258 | | McDonald' s | Ahwatukee | 7 | 258 | | Kathy 's Alterations | Ahwatukee | 12 | 258 | | Healthy and Clean Living Environments | Ahwatukee | 4 | 258 | | Active Kids Pediatrics | Ahwatukee | 4 | 258 | | Anthem Community Center | Anthem | 4 | 913 | | Scrapbooks To Remember | Anthem | 4 | 913 | | Hungry Howie' s Pizza | Anthem | 7 | 913 | | Pinata Nueva | Anthem | 3 | 913 | | Starbucks Coffee Company | Anthem | 13 | 913 | | Pizza Hut | Anthem | 6 | 913 | | Rays Pizza | Anthem | 19 | 913 | + ----------------------------------------+------------+---------------+-------------------+ 15 rows selected (0.543 seconds) |
Теперь. Давайте попробуем немного сложный запрос. Перечислите 10 лучших городов и их компании с самым высоким рейтингом с точки зрения количества отзывов. В этих запросах могут использоваться функции окна детализации, такие как rank, dens_rank.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
. . . . . . . . . . . > WITH X . . . . . . . . . . . > AS . . . . . . . . . . . > ( SELECT name , city, review_count, . . . . . . . . . . . > RANK() . . . . . . . . . . . > OVER (PARTITION BY city . . . . . . . . . . . > ORDER BY review_count DESC ) AS review_rank . . . . . . . . . . . > FROM `business.json`) . . . . . . . . . . . > SELECT X. name , X.city, X.review_count . . . . . . . . . . . > FROM X . . . . . . . . . . . > WHERE X.review_rank =1 ORDER BY review_count DESC LIMIT 10; + -------------------------------------------+-------------+---------------+ | name | city | review_count | + -------------------------------------------+-------------+---------------+ | Mon Ami Gabi | Las Vegas | 4084 | | Studio B | Henderson | 1336 | | Phoenix Sky Harbor International Airport | Phoenix | 1325 | | Four Peaks Brewing Co | Tempe | 1110 | | The Mission | Scottsdale | 783 | | Joe's Farm Grill | Gilbert | 770 | | The Old Fashioned | Madison | 619 | | Cornish Pasty Company | Mesa | 578 | | SanTan Brewing Company | Chandler | 469 | | Yard House | Glendale | 321 | + -------------------------------------------+-------------+---------------+ 10 rows selected (0.49 seconds) |
Сравните #reviews для каждого бизнеса с верхним и нижним количеством отзывов в городе.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
0: jdbc:drill:zk= local > SELECT name , city, review_count, . . . . . . . . . . . > FIRST_VALUE(review_count) . . . . . . . . . . . > OVER(PARTITION BY city ORDER BY review_count DESC ) AS top_review_count, . . . . . . . . . . . > LAST_VALUE(review_count) . . . . . . . . . . . > OVER(PARTITION BY city ORDER BY review_cout DESC ) AS bottom_review_count . . . . . . . . . . . > FROM `business.json` limit 15; + ----------------------------------------+------------+---------------+-------------------+----------------------+ | name | city | review_count | top_review_count | bottom_review_count | + ----------------------------------------+------------+---------------+-------------------+----------------------+ | My Wine Cellar | Ahwatukee | 98 | 124 | 12 | | McDonald 's | Ahwatukee | 7 | 124 | 12 | | U-Haul | Ahwatukee | 5 | 124 | 12 | | Hi-Health | Ahwatukee | 4 | 124 | 12 | | Healthy and Clean Living Environments | Ahwatukee | 4 | 124 | 12 | | Active Kids Pediatrics | Ahwatukee | 4 | 124 | 12 | | Cupz N' Crepes | Ahwatukee | 124 | 124 | 12 | | Kathy's Alterations | Ahwatukee | 12 | 124 | 12 | | Q to U BBQ | Anthem | 74 | 117 | 117 | | Dara Thai | Anthem | 56 | 117 | 117 | | Cafe Provence | Anthem | 53 | 117 | 117 | | Shanghai Club | Anthem | 50 | 117 | 117 | | Two Brothers Kitchen | Anthem | 43 | 117 | 117 | | The Tennessee Grill | Anthem | 32 | 117 | 117 | | Dollyrockers Boutique and Salon | Anthem | 30 | 117 | 117 | + ----------------------------------------+------------+---------------+-------------------+----------------------+ 15 rows selected (0.516 seconds) |
Сравните #reviews с #reviews для предыдущего и следующего бизнеса
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
0: jdbc:drill:zk= local > SELECT city, review_count, name , . . . . . . . . . . . > LAG(review_count, 1) OVER(PARTITION BY city ORDER BY review_count DESC ) . . . . . . . . . . . > AS preceding_count, . . . . . . . . . . . > LEAD(review_count, 1) OVER(PARTITION BY city ORDER BY review_count DESC ) . . . . . . . . . . . > AS following_count . . . . . . . . . . . > FROM `business.json` limit 15; + ------------+---------------+----------------------------------------+------------------+------------------+ | city | review_count | name | preceding_count | following_count | + ------------+---------------+----------------------------------------+------------------+------------------+ | Ahwatukee | 124 | Cupz N ' Crepes | null | 98 | | Ahwatukee | 98 | My Wine Cellar | 124 | 12 | | Ahwatukee | 12 | Kathy' s Alterations | 98 | 7 | | Ahwatukee | 7 | McDonald 's | 12 | 5 | | Ahwatukee | 5 | U-Haul | 7 | 4 | | Ahwatukee | 4 | Hi-Health | 5 | 4 | | Ahwatukee | 4 | Healthy and Clean Living Environments | 4 | 4 | | Ahwatukee | 4 | Active Kids Pediatrics | 4 | null | | Anthem | 117 | Roberto' s Authentic Mexican Food | null | 74 | | Anthem | 74 | Q to U BBQ | 117 | 64 | | Anthem | 64 | Outlets At Anthem | 74 | 56 | | Anthem | 56 | Dara Thai | 64 | 53 | | Anthem | 53 | Cafe Provence | 56 | 50 | | Anthem | 50 | Shanghai Club | 53 | 43 | | Anthem | 43 | Two Brothers Kitchen | 50 | 32 | + ------------+---------------+----------------------------------------+------------------+------------------+ 15 rows selected (0.518 seconds) |
Более подробную информацию и документацию по функциям Window и другим функциям Drill 1.2 можно найти в документах Drill и в документах MapR . Поздравляем сообщество Drill с очередной ключевой вехой и ждем большего.
Ссылка: | Использование новых функций Drill 1.2 — функции ANSI SQL Analytic / Window от нашего партнера JCG Чейза Хули в блоге Mapr . |