- SQL-Ex blog
- Что такое ad hoc запрос?
- Чем полезны ad hoc запросы?
- Что такое ad hoc запрос в базе данных?
- Что такое параметр Optimize for Ad Hoc Workload?
- Заключение
- Обратные ссылки
- Комментарии
- ad-hoc report
- Смотреть что такое «ad-hoc report» в других словарях:
- Как мы автоматизировали выгрузки и другие Ad-hoc задачи аналитика с помощью Zeppelin
- Что такое Zeppelin
- Какие динамические формы есть
- Какие задачи мы автоматизируем в Zeppelin
- Success. Победили текучку, освободили время для развития аналитики в компании
SQL-Ex blog
Новости сайта «Упражнения SQL», статьи и переводы
Что такое ad hoc запрос?
Ad hoc запрос — это отдельный запрос, не включенный в хранимую процедуру и не параметризованный или подготовленный. В зависимости от установок сервера, SQL Server может параметризовать некоторые операторы, изначально написанные как ad hoc запросы. Ad hoc не означает динамический.
Вот простой пример ad hoc запроса в SQL Server:
SQL Server параметризует этот простой запрос:
При поиске по запросу «что такое ad hoc запрос» я обнаружила один ответ, говорящий, что ad hoc запросы — это запросы, построенные при комбинации ответов на веб-форме. На самом деле это один из способов создать динамический запрос, который может являться ad hoc запросом, а может таким и не быть. Если динамический запрос параметризован, он не является ad hoc запросом.
Вот пример динамического запроса, который параметризован (подготовлен), поэтому он не является ad hoc:
Однако если параметров нет, запрос останется ad hoc. Вот пример ad hoc запроса, который так же является динамическим:
Чем полезны ad hoc запросы?
Во многих случаях разработчик или DBA может один раз выполнить ad hoc запрос, и больше никогда не использовать его. С другой стороны, один и тот же запрос может выполняться тысячи раз за день из приложения, и при этом, возможно, оставаться ad hoc запросом. В зависимости от запроса может не иметь смысла включать его в хранимую процедуру или параметризовать его.
Ad hoc запросы не являются ни плохими, ни хорошими; как и все остальное, это зависит от того, как они используются. Сошлюсь на интересную статью от Phil Factor, посвященную устранению проблем с некоторыми неэффективными ad hoc операторами.
Что такое ad hoc запрос в базе данных?
Чтобы выяснить, рассматривает ли SQL Server запрос как ad hoc, вы можете проверить тип объекта в кэше плана. Вот запрос из книги «Внутри Microsoft SQL Server 2012» Kalen Delaney и др. Замечу, что вам может потребоваться добавить больше фильтров на [text], если он вернет слишком много строк, чтобы отыскать ваш запрос.
Вы увидите тип объекта Adhoc для ad hoc запроса. Для параметризованных запросов вы также увидите строку с типом объекта Prepared. Вызовы хранимых процедур будут возвращать Proc, и имеется несколько других.
Что такое параметр Optimize for Ad Hoc Workload?
Представим себе систему, на которой каждый из большого числа запросов может выполняться только раз. Чтобы избежать ситуации, когда они занимают место в кэше планов, включите параметр Optimize for Ad Hoc Workload. Тогда при первом выполнении запроса в кэше сохраняется только заглушка плана. Если запрос выполняется снова, SQL Server сохранит весь план.
Заключение
Обратные ссылки
Нет обратных ссылок
Комментарии
Показывать комментарии Как список | Древовидной структурой
Автор не разрешил комментировать эту запись
Источник
ad-hoc report
Универсальный англо-русский словарь . Академик.ру . 2011 .
Смотреть что такое «ad-hoc report» в других словарях:
List of ad-hoc routing protocols — An Ad hoc routing protocol is a convention or standard that controls how nodes come to agree which way to route packets between computing devices in a mobile ad hoc network (MANET).In ad hoc networks , nodes do not have a priori knowledge of… … Wikipedia
Pointe du Hoc — (IPA2|pwε̃t dy ɔk) is a clifftop location on the coast of Normandy in northern France. It lies 4 miles (6.4 km) west of Omaha Beach, and stands on 100 ft (30 m) tall cliffs overlooking the sea. It was a point of attack by the United States Army… … Wikipedia
Pointe du Hoc — Saltar a navegación, búsqueda Imagen de la Pointe du Hoc. La Punta de Hoc, más conocida por el nombre original francés Pointe du Hoc, es una zona situada en la cima de un acantilado en la costa de Normandía, en el norte de Francia, y está a 30… … Wikipedia Español
Anderson Report — This article refers to a Report on Scientology. For the Anderson Report into UK Higher Education see Anderson Report. The Anderson Report is the colloquial name of the report of the Board of Inquiry into Scientology, an official inquiry into the… … Wikipedia
ad hoc — /ad hok /; Lat. /ahd hohk / 1. for the special purpose or end presently under consideration: a committee formed ad hoc to deal with the issue. 2. concerned or dealing with a specific subject, purpose, or end: The ad hoc committee disbanded after… … Universalium
ad hoc — (ahd HOHK) [Latin: for this] For a particular purpose or thing; up to this time. Usually applied to small groups or committees whose work will continue only as long as a specific problem is under discussion. This ad hoc group of five… … Dictionary of foreign words and phrases
Massaker in Hoc Khojali — Das Massaker von Xocalı ereignete sich am 25. Februar 1992 in der Stadt Xocalı (auch Hocalı, ausgesprochen Chodschali; russisch Ходжалы/Chodschaly, in englischer Transkription aus dem Russischen Khojaly). Im Zuge des bewaffneten Konflikts… … Deutsch Wikipedia
Vela Incident — Orthographic projection centered on the Prince Edward Islands, the location of the Vela incident The Vela Incident (sometimes referred to as the South Atlantic Flash) was an unidentified double flash of light that was detected by an American Vela … Wikipedia
Cognos — Former type Brand (of IBM) Industry Business Intelligence, Operational Intelligence, Performance Management, Workforce Analytics Fate Acquired Founded 1969 Foun … Wikipedia
Old Hungarian alphabet — For the Romanian village of Răvăşel, called Rovás in Hungarian, see Mihăileni, Sibiu. Old Hungarian Type Alphabet Time period unknown to today … Wikipedia
The InterProse Corporation — Infobox company company name = The InterProse Corporation company CC BY SA company type = Private foundation = 1996, incorporated 1997 location city = Vancouver, Washington location country = USA slogan = People Knowledge Technology key people =… … Wikipedia
Источник
Как мы автоматизировали выгрузки и другие Ad-hoc задачи аналитика с помощью Zeppelin
На момент написания этой статьи в компании Cardsmobile, которая разрабатывает мобильное приложение «Кошелёк», работает 195 человек: 8 аналитиков и 187 потенциальных заказчиков аналитиков. Мы делаем приложение для конечных пользователей, а также работаем с ритейлом, банками, брендами и другими партнерами. Долгое время работа аналитика в Кошельке состояла не только из исследований поведения пользователя, но и из различных выгрузок, типовых анализов для партнеров и прогнозов для потенциальных клиентов. Конечно, дашборды сильно спасали нам жизнь и позволяли всей компании следить за показателями продукта. Но мы всё ещё тратили время на остальную текучку, и с ростом команды (заказчиков) и бизнеса упёрлись: Ad-hoc задач стало слишком много, а исследования, желание развиваться и светлое будущее простаивали в отсутствие у нас времени.
Так много вокруг классных конференций, интересных статей про различные аналитические исследования, data-science, data-driven, data-счастье. А мы смотрели на всю эту красоту и не знали, где среди всего потока текучки найти время на эксперименты. Многие рассказывают, как сделать классно, но мало кто рассказывает, КАК преодолеть нарастающую текучку и освободить ресурсы для интересных и творческих задач. В этой статье я расскажу про наш опыт выхода в светлое будущее. Дальше будут примеры, как мы автоматизируем Ad-hoc задачи аналитиков в Zeppelin.
Что такое Zeppelin
Zeppelin – это OpenSource Notebook от Apache, который позволяет обращаться к различным БД на разных языках (Python, R, SQL, Spark). Но что делает его особенно кайфовым, так это набор визуальных элементов – dynamic forms.
В одном ноутбуке мы можем извлекать данные по api из Amplitude, быстро считать агрегаты из Clickhouse, дополнять результат данными из MSSQL и обрабатывать все это на Python. А готовые отчеты заворачивать в Excel в удобном заказчику формате и класть в html-ссылку, по которой их можно легко скачать.
Изначально мы начали использовать его просто как notebook, в котором было удобно писать на разных языках. Потом изучили возможности Zeppelin получше, нашли встроенные динамические формы: инбоксы, выпадающие списки и чеклиты – лампочка над головой загорелась! Сразу придумали, сколько всего мы можем автоматизировать. У нас было много типовых задач с готовым кодом, в котором надо было просто менять значения переменных. Мы перенесли весь наш код в Zeppelin, вынесли переменные в динамические формы и дали заказчикам возможность самостоятельно заполнять их и запускать скрипты. Идея понравилась и нам, и всей остальной команде!
Какие динамические формы есть
Input – текстовое поле. Мы используем его, для того чтобы задать временной диапазон для ввода идентификаторов. Другими словами, для всего, вариаций чего бывает много.
Select – выпадающий список. К каждому элементу списка можно прописать сразу готовый кусок кода. Мы предлагаем пользователю выбрать один из нескольких типовых вариантов. Например, одну из метрик для типового отчета.
Checkbox – форма для множественного выбора вариаций. Мы даем его пользователю, чтобы он, к примеру, сам мог выбрать список необходимых полей в выгрузке. Пожалуй, у нас это самый популярный кейс. Или когда мы даем возможность выбрать несколько метрик, сегментов пользователей.
Какие задачи мы автоматизируем в Zeppelin
Выгрузки простые и сложные, с использованием фильтров по дате, партнеру, задавая набор столбцов.
Чаще всего запросы на выгрузки приходят от аккаунт-менеджеров. А еще, с большой вероятностью, они поступают внезапно и срочно. Сами по себе задачи на выгрузку типовые и быстрые в выполнении. Но в действительности они отвлекают от тех самых интересных аналитических исследований, и их число растет по мере роста партнерской сети.
С какими задачами обычно приходят:
- Потенциальный партнер хочет оценить ту аудиторию, которая уже пользуется его картой лояльности в нашем приложении. Наши менеджеры по продажам могут прямо на встрече зайти в Zeppelin и выгрузить список карт. Они передают материалы еще до того, как диалог и интерес к нашему сервису начинают остывать. Мы не оценивали, но, возможно, это способствует ускорению продаж.
- К нашей партнерской сети подключается новый магазин. Его карты уже существовали в пластиковом формате, наши пользователи могли добавлять их в приложение и показывать штрихкод на кассе. Но с подключением мы дали партнеру новые возможности: теперь у пользователя под картой появилась информация о спецпредложениях, персональные скидки. Менеджер на стороне партнера хочет оценить, как изменилось покупательское поведение среди тех, кто добавил их карту в приложение «Кошелёк». Наш аккаунт-менеджер помогает ему — выгружает все карты номера и штрихкоды карт, которые уже существовали ранее на пластиковом носителе, выпущенные в какой-то определенный период.
- Партнер хочет повысить продажи определенного товара и запускает акцию. Он информирует свою аудиторию в приложении «Кошелёк» о специальных скидках на товар, используя пуш-сообщения. Чтобы оценить эффективность этой коммуникации, мы выгружаем ему отчет о том, кто получил и прочитал данный пуш.
Мы создали отчеты для всех частых задач на выгрузки, с которыми к нам обращались. Ускорили процессы наших коллег и высвободили время и внимание для более интересных задач. Теперь только дорабатываем эти отчеты по мере необходимости.
Типовые задачи, в которых надо просто запустить готовый скрипт. Тут тоже применяем фильтры, даём задать значение переменных. Например, пересчет какой-то метрики или отчета, которые используются редко и не хочется ставить их на расписание.
Более изощренный кейс из жизни. Отдел маркетинга совместно с нашими стратегическими партнерами решили провести промо-акцию с определенной механикой. Пользователи нашего приложения должны были совершить цепочку действий, становясь участниками розыгрыша подарков. Раз в неделю мы хотели получать список участников недели, рандомно определять победителей, поздравлять их и отправлять подарки. Аналитик направления создал notebook в Zeppelin, который собирал пользователей, соответствующих условиям участия в розыгрыше за прошедшую календарную неделю. Маркетолог самостоятельно запускал notebook и забирал участников недели.
Подведение итогов А/B-тестов, измерение base-line метрик в тестовой и контрольной группах. Когда мы тестируем новый функционал или триггерную коммуникацию, мы смотрим не только на изменение целевой метрики, но и на то, как в целом меняется поведение пользователя. Мы выделили 4 base-line метрики пользовательского поведения:
- Активность в приложении
- Выпуски карт лояльности и других продуктов
- Отписки
- Обращения в саппорт
Тут Zeppelin дает нам свободу в том, как мы хотим подводить итоги, какие метрики считать, как отрисовывать графики и как объяснять результат тем, кто будет пользоваться этим инструментом.
Собираем базы для коммуникаций и ретаргетинговых кампаний на основе выгружаемой из Amplitude когорты. Когда-то мы отказались от готовых коммуникационных платформ в пользу собственной разработки (возможно, это тема для отдельной статьи, а мы тут не об этом). Наше внутреннее решение было в первую очередь заточено под партнерские рассылки: выбери партнера и отправь сообщение на всю базу. А вот подготовка баз для продуктовых и маркетинговых коммуникаций — то есть собственных коммуникаций Кошелька — легла на плечи аналитиков. Типизировать все запросы от маркетинга и продактов казалось невозможным. Мы все стремились выделить наиболее релевантные сегменты, не ограничивая свои возможности. Например, вымышленный запрос, но запросы аналогичной сложности с нами случались:
- Пользователи, которые пришли в период …
- Добавили 5 или менее карт из топ 10 программ лояльности
- Начали проходить определенный сценарий, но не закончили
- Пользовались приложением больше 2х раз за последний месяц
- И можно добавить фильтры по модели устройства, сотовому оператору и географии
Конечно, мы сохраняли код после каждой такой задачи и собирали его в некий монструозный конструктор. Но это все еще было время и внимание аналитика. А ошибка из-за невнимательности могла стоить нам волны негодующих пользователей, которые получили очевидно нерелевантную для них коммуникацию.
И все это так и было, пока один аналитик не обленился достаточно, чтобы не писать код для выборки пользователей в Clickhouse, а собрать когорту в Amplitude и выгрузить ее по api. Что, согласитесь, сильно проще и быстрее. Привычный и уже понятный интерфейс Amplitude, где любой менеджер может самостоятельно собрать когорту со всеми фильтрами из примера выше, проверить ее размер, дополнительно проконтролировать себя и проверить пользователей из когорты, что они попали в нее верно.
Как выглядит механика:
- Продакт-менеджер или маркетолог создает когорту в Amplitude. При необходимости сложные кейсы показывает аналитику.
- Копирует id когорты, который находится в адресной строке
- Вставляет в notebook в Zeppelin
- Выставляет дополнительные фильтры, данных для которых нет в Amplitude
- Присваивает рассылке уникальный sub_id и запускает notebook
Что происходит в это время:
- Скрипт берет id когорты и выгружает ее по api из Amplitude
- Полученный DataFrame очищается от лишних строк в Python
- При необходимости база получателей дополнительно фильтруется по полу и/или возрасту
- Так же выделяется контрольная группа, если мы хотим измерить эффективность рассылки (а мы редко не хотим)
- Получатели записываются в БД для истории и передаются в csv-файл, который мы для удобства скачивания кладем в кликабельную ссылку
Я привела пример именно с пуш-рассылками, но у наших коллег быстро возникли идеи, где еще мы можем применять похожий инструмент: любые выгрузки списка пользователей с определенным пользовательским поведением. Сейчас мы используем когорты из Amplitude еще и для запуска ретаргетинговых кампаний. И, думаю, будем использовать и для многих других задач.
Системы мониторинга
Есть еще одна удобная фича, которая правда не относится к динамическим формам и, наверное, не совсем про автоматизацию – запуск по расписанию. Мы используем ее для пересчета дашбордов, запуска разных расчетов. Но самая полезная аналитическая задача, которую мы с ее помощью решаем, это мониторинг. Аномалии в событиях, в поведении метрик, что угодно, за чем должен регулярно следить аналитик, но что тоже хочется автоматизировать. Мы настроили систему алертов в slack и теперь можем вовремя реагировать на изменения, о которых хотим знать:
- Рост или падение важных продуктовых показателей, конверсий сценариев, которые отражают качество пользовательского опыта и влияют на Retention.
- Рост числа ошибок, которые могут возникать у пользователя. Не все такие аномалии могут отразиться на росте количества обращений в support. Многие могут повлиять на ухудшение конверсий и в итоге увеличить отток. И даже если они не критичны, а просто доставляют неудобство нашей аудитории, нам важно вовремя о них узнать и сократить их число.
- Просто аномалии в количестве всех событий и каждого в отдельности. Такой мониторинг позволяет нам отлавливать кейсы, о которых мы не подумали заранее.
- Мы так же настроили алерт о том, что какие-то из наших регулярных расчетов, которые работают в Zeppelin по расписанию, отработали с ошибкой. Мы создаем много полезных инструментов, но не можем постоянно вручную следить за их качеством.
Success. Победили текучку, освободили время для развития аналитики в компании
Самый приятный абзац этой статьи – наступило светлое будущее! Мы уже автоматизировали большую часть наших Ad-hoc задач. Теперь в спринте их меньше 10%. В освободившееся время мы проводим исследования, выдвигаем и проверяем гипотезы, усложняем наши продукты аналитики и применяем подходы из тех самых статей и выступлений на конференциях. Другими словами, мы наконец занимаемся интересной аналитической работой. А главное, у нас появилось время принимать активное участие в развитии Кошелька.
Совет начинающим автоматизаторам: все частые и типовые куски кода выносите в библиотеки. Это позволит писать быстрее, улучшать качество написания кода всей команды аналитиков и править код в одном месте, а не во всех ноутбуках. И не забывайте, что вы делаете инструмент не для себя, а для своих коллег. А у них разный бэкграунд. Не пугайте их сложными интерфейсами и формулировками, делайте проще и понятнее.
Data-счастье еще впереди, но мы уже сильно воодушевились, ожили и бежим ему навстречу.
Источник