Data Engineering Study #20「10年戦えるデータ分析入門」回・前半の発表資料です。

Data Engineering Study #20「10年戦えるデータ分析入門」回・前半の発表資料です。
Arelとは SQLを生成するライブラリーで、ActiveRecordがSQLを生成する際に内部的に使われています。 普段はあまり表に出てこないライブラリーですがArelを使いこなせるようになると複雑なSQLを文字列として実装しなくて良くなるため、ActiveRecordの生成するSQLと親和性の高いSQLを組み立てられるようになります。 Arelを使わないよくある実装 以下のように学生の試験結果を管理する Examモデル(examsテーブル)があります。試験は100点満点で60点以上が合格となります # t.bigint "student_id", null: false # t.integer "score", null: false class Exam < ApplicationRecord belongs_to :student scope :pass, -> { where('
Introduction I often work with clients who have large “data lakes” or big star schema style enterprise databases with fact and dimension tables as far as the eye can see. Invariably said clients end up with a substantial SQL codebase composed of hundreds of independent queries with lots of overlap between them. I want to be able to treat SQL repositories like I’d treat other codebases. That is, I’
Carlin Engより。 著者注: この投稿は、Hacker Newsのトップページに掲載されました。そこでの議論にお付き合い下さい。 SQL言語は、IBMのSystem R データベースの一部として、1974年に初めて登場しました。それから50年近くが経ち、SQLは産業用データベースの大部分を操作するための事実上の標準言語になりました。その使用法は、アプリケーションのプログラミングやデータ分析という2つの領域に分かれています。私の12年間のキャリア(データ・エンジニアとデータ・サイエンティスト)の大部分は後者に関するもので、SQLは私が最も多く使ってきた言語です。SQLの生産性は非常に高いのですが、その反面、多くの欠点や特殊性があることにも気付きました。私は主に実践者の立場から見ていますが、こうした「現実世界」の問題には、もっと基本的な、あるいは理論的な裏付けがあるのではないかと、いつ
SQLを書いていていろんな場面で「こんな文法であってくれたら!」と歯がゆい思いをすることは多々あります。 これまでに、こう拡張されてくれたらと思った内容をまとめてみました。 なお、この拡張は各社DBの“方言”とはまた別のものです。各社方言とは直交した拡張です。 また、純粋なテキスト変換処理で現行のSQLに変換できるようにというのも意図しています。 dangling comma, その他, カンマ区切りでカラムを列挙するときに、リストの最初と最後に無意味なカンマを許します。 SELECT col1, col2, -- ← これがdangling comma FROM some_table こういう書き方が許されるというもの。カラム構成を編集するときにコピペ操作がしやすくなります。また、gitの変更履歴が見やすくなります。 SELECT, ORDER BY, GROUP BYなどのカラム定義リ
ROWS & TABLES は、SQL をテーマにしたカードゲームです。 ゲームに含まれるカードは大きくわけて4種類。Insert, Delete, Select, Update です。 各プレイヤーに3枚の手札を配り、時計回りにプレイします。自分のターンになったらまず山札から一枚引いて、場に出すカードを選びます。 Insertカードの片面はデータになっていて、トラとかテディベアとかのentry と、所有者 owner 、カテゴリー category が記載されています。 自分の場にデータカードを Insert で増やしていきます。 Select カードを使うと、category で指定した場のデータカードで条件にあったものを、場から下げて獲得することができます。一旦獲得してしまったデータカードは、今後他のプレイヤーから奪われることがありません。 他の2種類のカードは、他のプレイヤーとのや
リレーショナルデータベース(RDBMS)を操作するための言語「SQL」。 データを取り出したり、追加したりする場合に必要で、データベースを扱う必要があるアプリケーションやサービスを開発する場合、SQLの知識は必須と言っても良いかもしれません。 本日紹介する「Visualize SQL Queries」は、このSQLの動作を分かりやすくアニメーションで表示してくれるWebサービスです。 開発者のKshitiz Tanwar氏は、同僚とSQLの問題をデバッグした際、2年ぶりにSQLを触ったこともあり、ユニオンとジョインを間違えて恥をかいてしまったとのこと。SQLの記憶をリフレッシュするため、自分自身のためにSQLを視覚化するためのツールを作ったそうです。 以下使用方法を説明します。 SQLキーワードを選択 Visualize SQL Queriesを使用するには、最初に「SQL Keyword
せっかくのGWなので、おもちゃを作りました。 Query Review Helperです。 github.com 背景 最近MySQLで実行されるクエリをレビューするタスクが異常に多くなってきました。 開発者の全員がindexやjoin, partition, limit offsetなどなどのハマりどころを知っているというのが理想ではありますが、そうも行きません。 大体EXPLAINをかけてtable scanになっていないか、sortやlimit offsetで劇的に重いクエリがないか確認すれば、すぐに問題になるようなことはありませんがいくつか問題があります。 複数のサービスを横串に見ていると各サービスのテーブル設計の詳細を知らない 大きいサービスだとテーブル数やカラム数が異常に多い(数百テーブル, 各テーブルに数十カラムとFKが、、、とか) tableやcolumn, subquer
Tutorial DやLINQがあるから「出てこない」というのは本当は正しくないけど、プログラミング言語については野心的なものから冗談みたいなものまで色々な言語が日々作られているのと比較すると、関係データベース向けの言語は全然出てこないという印象がある。 波カッコとbegin endのどちらがいいかとかコロンはターミネータとセパレータのどちらを表すのがいいかとかですら議論が発生するのに比べると、データベース言語についてはSQLの問題点とか代わりの言語といった話はほとんど聞かない。 関係データベースの基本アイデアは(コッドの論文をおぼろげに思い出せば)、 データを関係(直積集合の部分集合)で表現する 問い合わせ(クエリ)は、集合演算(関係代数演算)によっておこなう で、 その最小限の機能を実現するオモチャ言語を作るのはそれほど大変ではないように思える。関係データはタプル(配列)の列で表現すれ
sqlsとは sqlsとは、いま私が開発中のSQL用Language Serverです。SQLをエディタで編集するときの支援機能を実装したサーバとなっており、主な特徴は以下です。 Language ServerなのでLSクライアントが存在するエディタであればどんなエディタでも利用可能 SQL編集支援機能 自動補完(テーブル名、カラム名など) 定義参照 SQL実行 複数のRDSMSに対応 MySQL PostgreSQL SQLite3 Language Serverとは Language Server(あるいはLanguage Server Protocol)とは、プログラム言語の開発支援機能をエディタに提供するサーバ、およびその通信内容を規定したプロトコルです。ただしサーバといってもほとんどの場合ローカル内にホスティングしてローカルのエディタと通信をします。 ここでは主題ではないので詳し
SQLiteでは、ISO SQL標準同様に、文字列リテラルはシングルクォートで囲み、識別子をクォートする場合は、ダブルクォートで囲むことになっています。 'foo' : 文字列リテラル "foo" : 識別子(テーブル名、列名等) しかし、マニュアルによると、SQLiteのクォーティングには例外があります。それを実例で紹介しましょぅ。まずは、実験の準備として、列 a だけを持つテーブル a を作成します。 $ sqlite3 test.db sqlite> CREATE TABLE a(a integer); sqlite> INSERT INTO a VALUES(1); sqlite> SELECT * FROM a; 1 sqlite> 続いて、以下を実行します。実行結果はどうなるでしょうか? sqlite> SELECT 'a', "a", [a], `a`, "aa" FROM
Multiple Queries in the Console Query Editor Rockset Console’s query editor allows users to type and run queries over collections. Until now, however, whatever was typed in the editor was run and parsed as a single query. This means that, for a user, it wasn’t that easy to switch between multiple queries in our editor. They would have to comment out the queries they didn’t want to run, or keep all
こんにちは。shintaniです。 前回のSQL設計書(データ取得図)の記事 の続きです。 今回はGROUP BYやソート順の書き方、そしてインラインビューを使う場合と、書くときのポイントを説明します。 まずはGROUP BY とソート順。 (前回の紹介では書き忘れていました・・・) ソート順とグループ化項目の位置に違和感を覚える方もいるでしょう。 しかしソート順は図に書いた理由の他にも「SELECT項目がどう並ぶか?」という観点から、SELECT句のそばにあった方が分かりやすいです。 そしてグループ化項目は「テーブル結合後にどう集約するか?」なので、図の下にあった方が分かりやすいです。 次は インラインビュー。 こんな感じになります。 (インラインビューにしなくても出来る・・・というのは御容赦を) 書くときのポイントですが、 SELECT句はこだわらない。テーブル結合にこだわる です。
!!Con 2019 - Writing an Interpreter in SQL for Fun and No Profit! by Michael Malis Writing SQL can be hard. SQL code is a bizarre combination of yelling and relational algebra. How can we make writing SQL easier? By embedding our own programming language in our SQL queries of course! In this talk, we’ll take a look at how you use a combination of various Postgres features to build a programming
TL;DR This article aims to be the simplest introduction to constructing an LL(1) parser in Go, in this case for parsing SQL queries. It assumes minimal programming competence (functions, structs, ifs and for-loops). Here’s the complete parser repository if you want to skip to results: github.com/marianogappa/sqlparser Simplification disclaimer To make things simple we’re gonna descope sub-selects,
HugSQL is a Clojure library for embracing SQL. SQL is the right tool for the job when working with a relational database!HugSQL uses simple conventions in your SQL files to define database functions in your Clojure namespace, creating a clean separation of Clojure and SQL code.HugSQL supports runtime replacement of:SQL Values where id = :idSQL Value Lists where id in (:v*:ids)SQL Identifiers from
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く