[ad_1]
Tatbikatı biliyorsunuz: Aradığınız kelimeler Slack veya GitHub veya Google Drive veya Google Sheets veya Zendesk’te olabilir veya … liste uzayıp gidiyor. Bu silolar arasında arama yapmak yaygın bir hayal kırıklığıdır. Sürtünmesiz olmalı ve bu Buhar borusu pano öyle yapar.
Bu benim ilk rodeom değildi. bu yolculuğa başladım 1996 ve fikri periyodik olarak tekrar ziyaret ettim. İçinde 2018 Muhtemelen İşe Yarayabilecek En Basit Şey’in klasik örneği olan bir versiyon hakkında yazdım: internet sayfası çeşitli hizmetler için arama URL’lerini bir araya getiren ve her birini kendi sekmesinde ziyaret eden. Kulağa ne kadar aptalca gelse de, sadece benim tarafımdan değil, biraz alışmak yeterince yardımcı oldu.
Tabii ki temel API’leri kullanmak, sonuçları normalleştirmek ve ortak bir görünümde birleştirmek istedim. Ancak tüm API’leri karıştırmak için gereken çaba, bu projeyi değerinden daha fazla sorun haline getirdi. Bu tür bir şeyi daha önce yaptıysanız, çoğu hizmetin tercih ettiğiniz programlama dili için adaptörlerle birlikte arama API’leri sağladığını biliyorsunuzdur. Ancak her hizmetin API’yi çağırmak, sonuçları sayfalamak ve biçimlendirmek için kendi yolu olacaktır. Bu farklılıklar, sonuçlarla tutarlı bir şekilde çalışmak için üstesinden gelmeniz gereken sürtüşmeler yaratır.
API çekişmesi sorunsuz hale geldiğinde pek çok şey mümkün hale gelir. Etkili meta arama bunlardan biridir. Steampipe, sizi API’leri çağırma, sonuçları sayfalandırma ve JSON nesnelerini açma işinden kurtarır. Sizin için API’leri çağırır ve sonuçları veritabanı tablolarına aktarır, böylece tamamen verilerle çalışmaya odaklanabilirsiniz. Bu, bir meta arama panosu oluştururken karşılaştığınız en büyük sorunu çözer.
Bir şema üzerinde yakınsak
Sonraki zorluk, arama sonuçlarını ortak bir şemaya bağlamaktır. SQL, bunu yapmak için harika bir ortamdır. Ekran görüntüsünde gösterilen panoyu çalıştıran sorgu, yazmak için SQL sihirbazı olmanız gerekmeyen üç kıta içerir. Hepsi GitHub sorunlarını aramak için bununla aynı kalıbı takip eder.
select 'github_issue' as type, repository_full_name || ' ' || title as source, to_char(created_at, 'YYYY-MM-DD') as date, html_url as link, substring(body from 1 for 200) || '...' as content from github_search_issue where $1 ~ 'github_issue' and query = 'in:body in:comments org:github ' || $2 limit $3
Mavi renkli öğeler, bir veritabanı tablosundaki sütunların adlarıdır – bu durumda github_search_issueSteampipe’s tarafından yapılan tablolardan biri GitHub eklentisi. Steampipe hub bunu kolaylaştırır incelemek tablodaki sütunların adlarını ve açıklamalarını gösterir ve size örnekler tablodaki bilgilerin nasıl kullanılacağına ilişkin
Çünkü verileri getirmek için API’leri çağırma ve JSON paketini açmaodaklanabilirsin üst düzey arama sözdizimikaynak sütunları ortak bir şemaya eşlemenin ilginç (ve eğlenceli!) zorluğuyla birlikte düşünülecek çok şey var.
Kırmızı renkli öğeler, gösterge tablosunda görünen sütunların adlarıdır. Bu gösterge panosu için her arama sonucunun şu beş sütunla eşlenmesine karar verdik: tip, kaynak, tarih, bağlantıve içerik. SQL’in AS yan tümcesi, her kıtanın sütunlarını şemaya uyacak şekilde yeniden adlandırmasını kolaylaştırır.
tam sorgu
İşte gösterge tablosunu yönlendiren tam sorgu. Her biri giriş değişkenlerine karşılık gelen parametrelerle CTE (ortak tablo ifadesi) olarak yazılmış, yukarıdaki gibi üç kıta vardır. Ve neredeyse başka hiçbir şey yok! Her kıta, API tabanlı bir tabloyu sorgular (slack_search, github_search_issue, googleworkspace_drive_my_file), sütunları seçer (ve belki de dönüştürür) ve ardından sonuçları şemayla eşleşecek şekilde adlandırır. Geriye kalan tek şey, geçici tablolar gibi davranan üç CTE’yi BİRLEŞTİRMEK ve sonuçları sıralamak.
with slack as ( select 'slack' as type, user_name || ' in #' || (channel ->> 'name')::text as source, to_char(timestamp, 'YYYY-MM-DD') as date, permalink as link, substring(text from 1 for 200) as content from slack_search where $1 ~ 'slack' and query = 'in:#steampipe after:${local.config.slack_date} ' || $2 limit $3 ), github_issue as ( select 'github_issue' as type, repository_full_name || ' ' || title as source, to_char(created_at, 'YYYY-MM-DD') as date, html_url as link, substring(body from 1 for 200) || '...' as content from github_search_issue where $1 ~ 'github_issue' and query = ' in:body in:comments org:${local.config.github_org} ' || $2 limit $3 ), gdrive as ( select 'gdrive' as type, replace(mime_type,'application/vnd.google-apps.','') as source, to_char(created_time, 'YYYY-MM-DD') as date, ' || id as link, name as content from googleworkspace_drive_my_file where $1 ~ 'gdrive' and query = 'fullText contains ' || '''' || $2 || '''' limit $3 ) select * from slack union select * from github_issue union select * from gdrive order by date desc
Kod olarak panolar
Birçok pano sistemi bu sorgu ile çalışabilir. Örneğin, Metabase veya Tableau veya başka bir Postgres istemcisini Steampipe’a bağlayabilir ve burada gösterildiği gibi aynı türde etkileşimli pano oluşturabilirsiniz. Bunu, widget’ların ve ayarların bir kullanıcı arayüzünde işlendiği düşük kodlu bir ortamda yapardınız. buhar borusu gösterge paneli alt sistemi kod olarak altyapı (IaC) kökleri tarafından bilgilendirilen farklı bir yaklaşım benimser. API’lere yönelik sorgular, diğer tüm kodlar gibi sürüm kontrollü havuzlarda yönetilen SQL kodunda ifade edilmelidir. Bu sorguların sonuçlarını görüntüleyen pano widget’ları da aynı şekilde kodla ifade edilmelidir ve bu durumda dil Terraform’un dilidir. HCL.
İşte meta arama panosunun HCL tanımı. Üç tür bildirir giriş engellemek: kaynaklar (çoklu seçim), Arama terimi (metin) ve max_per_source (varsayılan olan tek seçim). ile çok daha fazlasını yapabilirsiniz. giriş blok—özellikle, bunu, aşağıdaki şekilde gösterildiği gibi bir SQL sorgusundan elde edilen sonuçlarla doldurabilirsiniz. Dökümantasyon. Gerçi burada buna gerek yok.
bu masa blok yukarıda tanımlanan sorguyu kullanır ve kendisine iletilen parametreleri tanımlar. bu paketlemek argümanı, çok sayıda metin içeren sütunların okunabilir olmasını sağlar.
dashboard "metasearch" { input "sources" { title = "sources" type = "multiselect" width = 2 option "slack" {} option "github_issue" {} option "gdrive" {} } input "search_term" { type = "text" width = 2 title = "search term" } input "max_per_source" { title = "max per source" width = 2 option "2" {} option "5" {} option "10" {} option "20" {} } table { title = "search slack + github + gdrive" query = query.metasearch args = [ self.input.sources, self.input.search_term, self.input.max_per_source ] column "source" { wrap = "all" } column "link" { wrap = "all" } column "content" { wrap = "all" } } }
Yine burada görülecek fazla bir şey yok, olmamalı da. Gösterge tablolarını kod olarak oluşturmak, çok sayıda karmaşık kod gerektirmemelidir ve gerektirmez.
Sihirbazlık gerekmez
Yeni alt sorgular oluşturmak için SQL sihirbazı olmanız gerekmediği gibi, bunları kontrol paneline eklemek için bir HCL sihirbazı olmanız da gerekmez. Kaynak eklemek ister misiniz? daha onlarca var eklentiler Her ay daha fazla eklenerek seçim yapmak için. Hepsi arama hizmeti sunmaz, ancak çoğu sunar ve onları (elbette!) bir Steampipe sorgusu ile bulmak kolaydır.
select name html_url from github_search_code where query = 'search org:turbot org:francois2metz org:ellisvalentiner org:theapsgroup' and name ~ 'table' and name ~ 'search' order by name
İçinde buhar borusu örnekleri repo, burada gösterilen kontrol panelinin kodunu ve deneme hesabımızın süresi dolduğunda kaldırdığımız Zendesk için ekstra bir arama kıtası ekledik. Bu gösterge tablosunu genişletirken iyi eğlenceler! İhtiyacınız olan bir arama API’sı zaten mevcut değilse, bize ulaşın gevşek topluluk ve bize bildirin. birisi zaten olabilir eklenti yazmak ihtiyacın var – ya da belki bunu kendin halletmek istersin. Her yeni eklenti, temel HCL artı SQL ile çalışabilen herkesin API’leri bir profesyonel gibi kullanmasını ve gerçek sorunları çözmesini mümkün kılar.
Telif Hakkı © 2022 IDG Communications, Inc.
[ad_2]
Kaynak : https://www.infoworld.com/article/3663031/tired-of-searching-slack-github-and-google-drive-separately-do-it-all-at-once-in-sql.html#tk.rss_all