SlideShare a Scribd company logo
1 of 39
One Database To Rule 'em All
FrOSCon 11
August 2016
Stefanie Janine Stölting
Head of Product Development
@sjstoelting
mail@stefanie-stoelting.de
PostgreSQL SQL-MED
SQL/MED
Defined by ISO/IEC 9075-9:2008
Supported by
DB2
MariaDB
With CONNECT storage engine,
implementation differs to the standard
PostgreSQL
Implementation
Foreign Data Wrapper
Read only
Read and write
Installation as extensions
Available FDW
Examples:
Oracle (pgxn.org)
MS SQL Server / Sybase ASE
read-only (pgxn.org)
MongoDB
read-only (pgxn.org)
MariaDB / MySQL (pgxn.org)
SQLite (GithHub)
Hadoo (HDFS) (GitHub)
Special FDW
file_fdw
postgres_fdw
foreign_table_exposer
Write your own FDW
Multicorn
Use Python and Multicorn to write your own
and access lots of stuff like
IMAP
HTML
Data source
The example data used in the SQL part is
available from Chinook Database:
PostgreSQL
MySQL
CSV
SQLite
Chinook Tables
CTE
Common Table Expressions will be used in examples
● Example:
WITH RECURSIVE t(n) AS (
VALUES (1)
UNION ALL
SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n), min(n), max(n) FROM t;
●
Result:
Live Data examples
Live Data examples
-- Create the SQLite foreign data wrapper extension in the current database
CREATE EXTENSION sqlite_fdw;
-- Create the mapping to the foreign SQLite file
CREATE SERVER sqlite_server
FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/var/sqlite/Chinook_Sqlite.sqlite')
;
-- Create the SQLite foreign table, column definitions have to match
CREATE FOREIGN TABLE sqlite_artist(
"ArtistId" integer,
"Name" character varying(120)
)
SERVER sqlite_server
OPTIONS(
table 'Artist'
);
Live Data examples
-- Select some data
SELECT * FROM sqlite_artist;
Live Data examples
-- Create the foreign data wrapper extension in the current database
CREATE EXTENSION mysql_fdw;
-- Create the mapping to the foreign MariaDB server
CREATE SERVER mariadb_server
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host '127.0.0.1', port '3306');
-- Create a user mapping with user and password of the foreign table
-- PostgreSQL gives you options to connect this user with its own users
CREATE USER MAPPING FOR PUBLIC SERVER mariadb_server
OPTIONS (username 'stefanie', password 'secret');
Live Data examples
-- Create the MariaDB foreign table, column definitions have to match
CREATE FOREIGN TABLE mysql_album(
"AlbumId" integer,
"Title" character varying(160),
"ArtistId" integer
)
SERVER mariadb_server
OPTIONS(
dbname 'Chinook',
table_name 'Album'
);
-- Select some data
SELECT * FROM mysql_album;
Live Data examples
-- Join SQLite and MariaDB tables
SELECT artist."Name"
, album."Title"
FROM sqlite_artist AS artist
INNER JOIN mysql_album AS album
ON artist."ArtistId" = album."ArtistId"
;
Live Data examples
CREATE EXTENSION postgres_fdw;
-- Create a connection to the other database on the same server
CREATE SERVER pg_localhost_chinook
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '127.0.0.1', port '5432', dbname 'chinook')
;
-- Create a user mapping
CREATE USER MAPPING FOR stefanie
SERVER pg_localhost_chinook
OPTIONS (user 'stefanie', password 'password')
;
Live Data examples
-- Link foreign tables into the current database and schema
IMPORT FOREIGN SCHEMA public LIMIT TO("Track")
FROM SERVER pg_localhost_chinook
INTO public
;
-- Try to select some data
SELECT * FROM "Track";
Live Data examples
-- Join SQLite, MariaDB, and PostgreSQL tables
SELECT artist."Name"
, album."Title"
, track."Name"
FROM sqlite_artist AS artist
INNER JOIN mysql_album AS album
ON artist."ArtistId" = album."ArtistId"
INNER JOIN "Track" AS track
ON album."AlbumId" = track."AlbumId"
;
Live Data examples
CREATE EXTENSION file_fdw;
-- One does need a server, but afterwards every csv file is avilable
CREATE SERVER chinook_csv
FOREIGN DATA WRAPPER file_fdw
;
-- Creating a foreign table based on a csv file
-- Options are the same as in COPY
CREATE FOREIGN TABLE csv_genre (
"GenreId" integer,
"Name" text
) SERVER chinook_csv
OPTIONS (
filename '/var/tmp/Genre.csv',
format 'csv',
HEADER 'true'
);
Live Data examples
-- Select some data
SELECT * FROM csv_genre;
Live Data examples
-- Join SQLite, MariaDB, PostgreSQL, and CSV tables
SELECT artist."Name"
, album."Title"
, track."Name"
, genre."Name"
FROM sqlite_artist AS artist
INNER JOIN mysql_album AS album
ON artist."ArtistId" = album."ArtistId"
INNER JOIN "Track" AS track
ON album."AlbumId" = track."AlbumId"
INNER JOIN csv_genre AS genre
ON track."GenreId" = genre."GenreId"
;
Live Data examples
-- Joining SQLite and MariaDB tables using PostgreSQL expressions
WITH album AS
(
SELECT "ArtistId"
, array_agg("Title") AS album_titles
FROM mysql_album
GROUP BY "ArtistId"
)
SELECT artist."Name" AS artist
, album.album_titles
FROM sqlite_artist AS artist
INNER JOIN album
ON artist."ArtistId" = album."ArtistId"
;
Live Data examples
-- Creates an materialized view on foreign tables
CREATE MATERIALIZED VIEW mv_album_artist AS
WITH album AS
(
SELECT "ArtistId"
, array_agg("Title") AS album_titles
FROM mysql_album
GROUP BY "ArtistId"
)
SELECT artist."Name" AS artist
, album.album_titles
, SUM(ARRAY_LENGTH(album_titles, 1))
FROM sqlite_artist AS artist
LEFT OUTER JOIN album
ON artist."ArtistId" = album."ArtistId"
GROUP BY artist."Name"
, album.album_titles
;
Live Data examples
-- Select the mv data
SELECT *
FROM mv_album_artist
WHERE upper(artist) LIKE 'A%'
ORDER BY artist
;
Live Data examples
-- SELECT the amount of albums from the MariaDB table from MariaDB, not with a foreign data
wrapper
SELECT count( * ) AS AlbumCount
FROM `Album`
;
Live Data examples
-- Insert data calculated from foreign tables using PostgreSQL features into another foreign table
INSERT INTO mysql_album("AlbumId", "ArtistId", "Title")
WITH album AS
(
-- Generate a new album id
SELECT MAX(album."AlbumId") + 1 AS new_album_id
FROM mysql_album AS album
)
SELECT album.new_album_id
, artist."ArtistId"
, 'Back in Black'
FROM sqlite_artist AS artist, album
WHERE artist."Name" = 'AC/DC'
GROUP BY album.new_album_id
, artist."ArtistId"
;
Live Data examples
-- SELECT the amount of albums from the MariaDB table from MariaDB, not with a foreign data
wrapper
SELECT count( * ) AS AlbumCount
FROM `Album`
;
Live Data examples
-- Select data from the materialized view
SELECT *
FROM mv_album_artist
WHERE artist = 'AC/DC'
ORDER BY artist
;
-- Refresh the mv to see the recently added data
REFRESH MATERIALIZED VIEW mv_album_artist;
-- We can even delete data from foreign tables
DELETE FROM mysql_album
WHERE "Title" = 'Back in Black'
AND "ArtistId" = 1
;
Live Data examples
-- Using PostgreSQL JSON with data from MariaDB and SQLite
-- Step 1: Albums with tracks as JSON
WITH albums AS
(
SELECT a."ArtistId" AS artist_id
, a."Title" AS album_title
, array_agg(t."Name") AS album_tracks
FROM mysql_album AS a
INNER JOIN "Track" AS t
ON a."AlbumId" = t."AlbumId"
GROUP BY a."ArtistId"
, a."Title"
)
SELECT row_to_json(albums) AS album_tracks
FROM albums
;
Live Data examples
-- Albums including tracks with aritsts with some JSON magic
WITH albums AS
(
SELECT a."ArtistId" AS artist_id
, a."Title" AS album_title
, array_agg(t."Name") AS album_tracks
FROM mysql_album AS a
INNER JOIN "Track" AS t
ON a."AlbumId" = t."AlbumId"
GROUP BY a."ArtistId"
, a."Title"
)
, js_albums AS
(
SELECT row_to_json(albums) AS album_tracks
FROM albums
)
SELECT a."Name" AS artist
, jsonb_pretty(al.album_tracks::jsonb) AS albums_tracks
FROM sqlite_artist AS a
INNER JOIN js_albums AS al
ON a."ArtistId" = (al.album_tracks→>'artist_id')::int
;
Live Data examples
Live Data examples
-- Create the multicorn extension
CREATE EXTENSION multicorn;
Live Data examples
CREATE SERVER rss_srv foreign data wrapper multicorn options (
wrapper 'multicorn.rssfdw.RssFdw'
)
;
Live Data examples
-- Create a foreign table based on an RSS feed
CREATE FOREIGN TABLE rss_yahoo_entertainment (
"pubDate" timestamp,
description character varying,
title character varying,
link character varying
) server rss_srv options (
url 'http://news.yahoo.com/rss/entertainment'
)
;
Live Data examples
-- Query that RSS feed
SELECT *
FROM rss_yahoo_entertainment
;
Live Data examples
-- Query that RSS feed with an expression
SELECT *
FROM rss_yahoo_entertainment
WHERE lower(title) LIKE '%gawker%'
;
Link List
PGXN Extensions:
- mysql_fdw, MySQL/MariaDB FDW
- sqlite_fdw, SQLite FDW
Slide and source on Github:
https://github.com/sjstoelting/talks
One Database To Rule 'em All
This document by Stefanie Janine Stölting is covered by the
Creative Commons Attribution 4.0 International

More Related Content

What's hot

Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntuMengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntuAlferizhy Chalter
 
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Kai Chan
 
Java Performance Tips (So Code Camp San Diego 2014)
Java Performance Tips (So Code Camp San Diego 2014)Java Performance Tips (So Code Camp San Diego 2014)
Java Performance Tips (So Code Camp San Diego 2014)Kai Chan
 
Ch3(working with file)
Ch3(working with file)Ch3(working with file)
Ch3(working with file)Chhom Karath
 
Course 102: Lecture 4: Using Wild Cards
Course 102: Lecture 4: Using Wild CardsCourse 102: Lecture 4: Using Wild Cards
Course 102: Lecture 4: Using Wild CardsAhmed El-Arabawy
 
7. Data Import – Data Export
7. Data Import – Data Export7. Data Import – Data Export
7. Data Import – Data ExportFAO
 
"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - Chicago"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - ChicagoErik Hatcher
 
Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)Kai Chan
 
HTML Templates Using Clear Silver
HTML Templates Using Clear SilverHTML Templates Using Clear Silver
HTML Templates Using Clear SilverPaulWay
 
第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 DatasourceKaz Watanabe
 
Queries in sq lite
Queries in sq liteQueries in sq lite
Queries in sq liteSoba Arjun
 
Introducing FSter
Introducing FSterIntroducing FSter
Introducing FSteritsmesrl
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Ahmed El-Arabawy
 
Xslate sv perl-2013-7-11
Xslate sv perl-2013-7-11Xslate sv perl-2013-7-11
Xslate sv perl-2013-7-11Goro Fuji
 
Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)Kai Chan
 
Ugif 10 2012 beauty ofifmxdiskstructs ugif
Ugif 10 2012 beauty ofifmxdiskstructs ugifUgif 10 2012 beauty ofifmxdiskstructs ugif
Ugif 10 2012 beauty ofifmxdiskstructs ugifUGIF
 
On secure application of PHP wrappers
On secure application  of PHP wrappersOn secure application  of PHP wrappers
On secure application of PHP wrappersPositive Hack Days
 

What's hot (20)

Tthornton code4lib
Tthornton code4libTthornton code4lib
Tthornton code4lib
 
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntuMengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
 
Mongodb hackathon 02
Mongodb hackathon 02Mongodb hackathon 02
Mongodb hackathon 02
 
Php Sq Lite
Php Sq LitePhp Sq Lite
Php Sq Lite
 
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
 
Java Performance Tips (So Code Camp San Diego 2014)
Java Performance Tips (So Code Camp San Diego 2014)Java Performance Tips (So Code Camp San Diego 2014)
Java Performance Tips (So Code Camp San Diego 2014)
 
Ch3(working with file)
Ch3(working with file)Ch3(working with file)
Ch3(working with file)
 
Course 102: Lecture 4: Using Wild Cards
Course 102: Lecture 4: Using Wild CardsCourse 102: Lecture 4: Using Wild Cards
Course 102: Lecture 4: Using Wild Cards
 
7. Data Import – Data Export
7. Data Import – Data Export7. Data Import – Data Export
7. Data Import – Data Export
 
"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - Chicago"Solr Update" at code4lib '13 - Chicago
"Solr Update" at code4lib '13 - Chicago
 
Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 2 (SoCal Code Camp LA 2013)
 
HTML Templates Using Clear Silver
HTML Templates Using Clear SilverHTML Templates Using Clear Silver
HTML Templates Using Clear Silver
 
第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource
 
Queries in sq lite
Queries in sq liteQueries in sq lite
Queries in sq lite
 
Introducing FSter
Introducing FSterIntroducing FSter
Introducing FSter
 
Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions Course 102: Lecture 13: Regular Expressions
Course 102: Lecture 13: Regular Expressions
 
Xslate sv perl-2013-7-11
Xslate sv perl-2013-7-11Xslate sv perl-2013-7-11
Xslate sv perl-2013-7-11
 
Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)
Search Engine-Building with Lucene and Solr, Part 1 (SoCal Code Camp LA 2013)
 
Ugif 10 2012 beauty ofifmxdiskstructs ugif
Ugif 10 2012 beauty ofifmxdiskstructs ugifUgif 10 2012 beauty ofifmxdiskstructs ugif
Ugif 10 2012 beauty ofifmxdiskstructs ugif
 
On secure application of PHP wrappers
On secure application  of PHP wrappersOn secure application  of PHP wrappers
On secure application of PHP wrappers
 

Viewers also liked

Norme de-aplicare a Legii 142/1998 privind tichetele de masa
Norme de-aplicare a Legii 142/1998 privind tichetele de masaNorme de-aplicare a Legii 142/1998 privind tichetele de masa
Norme de-aplicare a Legii 142/1998 privind tichetele de masaCityConta.ro
 
Clive duffield cv aug 2015
Clive duffield   cv aug 2015Clive duffield   cv aug 2015
Clive duffield cv aug 2015Clive Duffield
 
Sistema nervioso-central
Sistema nervioso-centralSistema nervioso-central
Sistema nervioso-centralAugusta Yanez
 
Prateek chauhan cv senior business analyst_csc
Prateek chauhan cv senior business analyst_cscPrateek chauhan cv senior business analyst_csc
Prateek chauhan cv senior business analyst_cscPrateek Chauhan
 
Mom's Back To School Essentials
Mom's Back To School EssentialsMom's Back To School Essentials
Mom's Back To School EssentialsMaidPro Central CT
 
Finland
FinlandFinland
Finlandolos97
 
Sistema nervioso autonomo
Sistema nervioso autonomoSistema nervioso autonomo
Sistema nervioso autonomoAugusta Yanez
 
Survey of Instruction Hotel Management Prof Godbe
Survey of Instruction Hotel Management Prof GodbeSurvey of Instruction Hotel Management Prof Godbe
Survey of Instruction Hotel Management Prof GodbeBill Godbe
 
Maher Eduworld Company Profile
Maher Eduworld Company ProfileMaher Eduworld Company Profile
Maher Eduworld Company ProfilePrashant Agarwal
 
Gestational diabetes type 2 by Dr ihsan shah
Gestational diabetes type 2 by Dr ihsan shahGestational diabetes type 2 by Dr ihsan shah
Gestational diabetes type 2 by Dr ihsan shahAyub Medical College
 

Viewers also liked (18)

Norme de-aplicare a Legii 142/1998 privind tichetele de masa
Norme de-aplicare a Legii 142/1998 privind tichetele de masaNorme de-aplicare a Legii 142/1998 privind tichetele de masa
Norme de-aplicare a Legii 142/1998 privind tichetele de masa
 
Clive duffield cv aug 2015
Clive duffield   cv aug 2015Clive duffield   cv aug 2015
Clive duffield cv aug 2015
 
Normal Labour by Dr Salman
Normal Labour by Dr SalmanNormal Labour by Dr Salman
Normal Labour by Dr Salman
 
Simple guide to creativity
Simple guide to creativitySimple guide to creativity
Simple guide to creativity
 
Sistema nervioso-central
Sistema nervioso-centralSistema nervioso-central
Sistema nervioso-central
 
Prateek chauhan cv senior business analyst_csc
Prateek chauhan cv senior business analyst_cscPrateek chauhan cv senior business analyst_csc
Prateek chauhan cv senior business analyst_csc
 
Mom's Back To School Essentials
Mom's Back To School EssentialsMom's Back To School Essentials
Mom's Back To School Essentials
 
Finland
FinlandFinland
Finland
 
El tabano
El tabanoEl tabano
El tabano
 
Sistema nervioso autonomo
Sistema nervioso autonomoSistema nervioso autonomo
Sistema nervioso autonomo
 
Teekait may 16
Teekait may 16Teekait may 16
Teekait may 16
 
2015 Resume p
2015 Resume p2015 Resume p
2015 Resume p
 
Sebastian
SebastianSebastian
Sebastian
 
NOSANN Profile
NOSANN ProfileNOSANN Profile
NOSANN Profile
 
Survey of Instruction Hotel Management Prof Godbe
Survey of Instruction Hotel Management Prof GodbeSurvey of Instruction Hotel Management Prof Godbe
Survey of Instruction Hotel Management Prof Godbe
 
Maher Eduworld Company Profile
Maher Eduworld Company ProfileMaher Eduworld Company Profile
Maher Eduworld Company Profile
 
Nebosh Certificate
Nebosh CertificateNebosh Certificate
Nebosh Certificate
 
Gestational diabetes type 2 by Dr ihsan shah
Gestational diabetes type 2 by Dr ihsan shahGestational diabetes type 2 by Dr ihsan shah
Gestational diabetes type 2 by Dr ihsan shah
 

Similar to One Database to Rule 'em all (FrOSCon 11)

Overiew of Cassandra and Doradus
Overiew of Cassandra and DoradusOveriew of Cassandra and Doradus
Overiew of Cassandra and Doradusrandyguck
 
My sql presentation
My sql presentationMy sql presentation
My sql presentationNikhil Jain
 
MYSQL
MYSQLMYSQL
MYSQLARJUN
 
DBIx::Class beginners
DBIx::Class beginnersDBIx::Class beginners
DBIx::Class beginnersleo lapworth
 
Graph Analysis over JSON, Larus
Graph Analysis over JSON, LarusGraph Analysis over JSON, Larus
Graph Analysis over JSON, LarusNeo4j
 
supporting t-sql scripts for IndexPage, Datapage and IndexDefragmentation
supporting t-sql scripts for IndexPage, Datapage and IndexDefragmentationsupporting t-sql scripts for IndexPage, Datapage and IndexDefragmentation
supporting t-sql scripts for IndexPage, Datapage and IndexDefragmentationMahabubur Rahaman
 
DBIx::Class introduction - 2010
DBIx::Class introduction - 2010DBIx::Class introduction - 2010
DBIx::Class introduction - 2010leo lapworth
 
Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015StampedeCon
 
Functional Programming in Java 8
Functional Programming in Java 8Functional Programming in Java 8
Functional Programming in Java 8宇 傅
 
Php Data Objects
Php Data ObjectsPhp Data Objects
Php Data Objectshiren.joshi
 
Bubbles – Virtual Data Objects
Bubbles – Virtual Data ObjectsBubbles – Virtual Data Objects
Bubbles – Virtual Data ObjectsStefan Urbanek
 
Seesion 7 ASP.Net (MVC) Model
Seesion 7 ASP.Net (MVC) ModelSeesion 7 ASP.Net (MVC) Model
Seesion 7 ASP.Net (MVC) ModelMustafa Saeed
 

Similar to One Database to Rule 'em all (FrOSCon 11) (20)

Sah
SahSah
Sah
 
No sql the-sql-way
No sql the-sql-wayNo sql the-sql-way
No sql the-sql-way
 
MySQL
MySQLMySQL
MySQL
 
Overiew of Cassandra and Doradus
Overiew of Cassandra and DoradusOveriew of Cassandra and Doradus
Overiew of Cassandra and Doradus
 
MYSQL
MYSQLMYSQL
MYSQL
 
My sql presentation
My sql presentationMy sql presentation
My sql presentation
 
MYSQL
MYSQLMYSQL
MYSQL
 
DBIx::Class beginners
DBIx::Class beginnersDBIx::Class beginners
DBIx::Class beginners
 
Graph Analysis over JSON, Larus
Graph Analysis over JSON, LarusGraph Analysis over JSON, Larus
Graph Analysis over JSON, Larus
 
supporting t-sql scripts for IndexPage, Datapage and IndexDefragmentation
supporting t-sql scripts for IndexPage, Datapage and IndexDefragmentationsupporting t-sql scripts for IndexPage, Datapage and IndexDefragmentation
supporting t-sql scripts for IndexPage, Datapage and IndexDefragmentation
 
DBIx::Class introduction - 2010
DBIx::Class introduction - 2010DBIx::Class introduction - 2010
DBIx::Class introduction - 2010
 
Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015
 
Session 2- day 3
Session 2- day 3Session 2- day 3
Session 2- day 3
 
Neo4j (Part 1)
Neo4j (Part 1)Neo4j (Part 1)
Neo4j (Part 1)
 
Functional Programming in Java 8
Functional Programming in Java 8Functional Programming in Java 8
Functional Programming in Java 8
 
Php Data Objects
Php Data ObjectsPhp Data Objects
Php Data Objects
 
Bubbles – Virtual Data Objects
Bubbles – Virtual Data ObjectsBubbles – Virtual Data Objects
Bubbles – Virtual Data Objects
 
JSON and the APInauts
JSON and the APInautsJSON and the APInauts
JSON and the APInauts
 
Seesion 7 ASP.Net (MVC) Model
Seesion 7 ASP.Net (MVC) ModelSeesion 7 ASP.Net (MVC) Model
Seesion 7 ASP.Net (MVC) Model
 
jdbc
jdbcjdbc
jdbc
 

Recently uploaded

GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]📊 Markus Baersch
 
毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degreeyuu sss
 
Heart Disease Classification Report: A Data Analysis Project
Heart Disease Classification Report: A Data Analysis ProjectHeart Disease Classification Report: A Data Analysis Project
Heart Disease Classification Report: A Data Analysis ProjectBoston Institute of Analytics
 
Multiple time frame trading analysis -brianshannon.pdf
Multiple time frame trading analysis -brianshannon.pdfMultiple time frame trading analysis -brianshannon.pdf
Multiple time frame trading analysis -brianshannon.pdfchwongval
 
Call Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts ServiceCall Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts ServiceSapana Sha
 
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝DelhiRS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhijennyeacort
 
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一fhwihughh
 
Customer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxCustomer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxEmmanuel Dauda
 
Defining Constituents, Data Vizzes and Telling a Data Story
Defining Constituents, Data Vizzes and Telling a Data StoryDefining Constituents, Data Vizzes and Telling a Data Story
Defining Constituents, Data Vizzes and Telling a Data StoryJeremy Anderson
 
9654467111 Call Girls In Munirka Hotel And Home Service
9654467111 Call Girls In Munirka Hotel And Home Service9654467111 Call Girls In Munirka Hotel And Home Service
9654467111 Call Girls In Munirka Hotel And Home ServiceSapana Sha
 
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...soniya singh
 
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort servicejennyeacort
 
NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...
NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...
NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...Boston Institute of Analytics
 
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一F sss
 
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Sapana Sha
 
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSINGmarianagonzalez07
 
Advanced Machine Learning for Business Professionals
Advanced Machine Learning for Business ProfessionalsAdvanced Machine Learning for Business Professionals
Advanced Machine Learning for Business ProfessionalsVICTOR MAESTRE RAMIREZ
 
ASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel CanterASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel Cantervoginip
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...Florian Roscheck
 
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...dajasot375
 

Recently uploaded (20)

GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]
 
毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
毕业文凭制作#回国入职#diploma#degree澳洲中央昆士兰大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
 
Heart Disease Classification Report: A Data Analysis Project
Heart Disease Classification Report: A Data Analysis ProjectHeart Disease Classification Report: A Data Analysis Project
Heart Disease Classification Report: A Data Analysis Project
 
Multiple time frame trading analysis -brianshannon.pdf
Multiple time frame trading analysis -brianshannon.pdfMultiple time frame trading analysis -brianshannon.pdf
Multiple time frame trading analysis -brianshannon.pdf
 
Call Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts ServiceCall Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts Service
 
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝DelhiRS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
 
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
 
Customer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxCustomer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptx
 
Defining Constituents, Data Vizzes and Telling a Data Story
Defining Constituents, Data Vizzes and Telling a Data StoryDefining Constituents, Data Vizzes and Telling a Data Story
Defining Constituents, Data Vizzes and Telling a Data Story
 
9654467111 Call Girls In Munirka Hotel And Home Service
9654467111 Call Girls In Munirka Hotel And Home Service9654467111 Call Girls In Munirka Hotel And Home Service
9654467111 Call Girls In Munirka Hotel And Home Service
 
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
 
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
 
NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...
NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...
NLP Data Science Project Presentation:Predicting Heart Disease with NLP Data ...
 
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
 
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
 
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
 
Advanced Machine Learning for Business Professionals
Advanced Machine Learning for Business ProfessionalsAdvanced Machine Learning for Business Professionals
Advanced Machine Learning for Business Professionals
 
ASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel CanterASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel Canter
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
 
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
 

One Database to Rule 'em all (FrOSCon 11)

  • 1. One Database To Rule 'em All FrOSCon 11 August 2016 Stefanie Janine Stölting Head of Product Development @sjstoelting mail@stefanie-stoelting.de PostgreSQL SQL-MED
  • 2.
  • 3. SQL/MED Defined by ISO/IEC 9075-9:2008 Supported by DB2 MariaDB With CONNECT storage engine, implementation differs to the standard PostgreSQL
  • 4. Implementation Foreign Data Wrapper Read only Read and write Installation as extensions
  • 5. Available FDW Examples: Oracle (pgxn.org) MS SQL Server / Sybase ASE read-only (pgxn.org) MongoDB read-only (pgxn.org) MariaDB / MySQL (pgxn.org) SQLite (GithHub) Hadoo (HDFS) (GitHub)
  • 7. Write your own FDW Multicorn Use Python and Multicorn to write your own and access lots of stuff like IMAP HTML
  • 8. Data source The example data used in the SQL part is available from Chinook Database: PostgreSQL MySQL CSV SQLite
  • 10. CTE Common Table Expressions will be used in examples ● Example: WITH RECURSIVE t(n) AS ( VALUES (1) UNION ALL SELECT n+1 FROM t WHERE n < 100 ) SELECT sum(n), min(n), max(n) FROM t; ● Result:
  • 12. Live Data examples -- Create the SQLite foreign data wrapper extension in the current database CREATE EXTENSION sqlite_fdw; -- Create the mapping to the foreign SQLite file CREATE SERVER sqlite_server FOREIGN DATA WRAPPER sqlite_fdw OPTIONS (database '/var/sqlite/Chinook_Sqlite.sqlite') ; -- Create the SQLite foreign table, column definitions have to match CREATE FOREIGN TABLE sqlite_artist( "ArtistId" integer, "Name" character varying(120) ) SERVER sqlite_server OPTIONS( table 'Artist' );
  • 13. Live Data examples -- Select some data SELECT * FROM sqlite_artist;
  • 14. Live Data examples -- Create the foreign data wrapper extension in the current database CREATE EXTENSION mysql_fdw; -- Create the mapping to the foreign MariaDB server CREATE SERVER mariadb_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '127.0.0.1', port '3306'); -- Create a user mapping with user and password of the foreign table -- PostgreSQL gives you options to connect this user with its own users CREATE USER MAPPING FOR PUBLIC SERVER mariadb_server OPTIONS (username 'stefanie', password 'secret');
  • 15. Live Data examples -- Create the MariaDB foreign table, column definitions have to match CREATE FOREIGN TABLE mysql_album( "AlbumId" integer, "Title" character varying(160), "ArtistId" integer ) SERVER mariadb_server OPTIONS( dbname 'Chinook', table_name 'Album' ); -- Select some data SELECT * FROM mysql_album;
  • 16. Live Data examples -- Join SQLite and MariaDB tables SELECT artist."Name" , album."Title" FROM sqlite_artist AS artist INNER JOIN mysql_album AS album ON artist."ArtistId" = album."ArtistId" ;
  • 17. Live Data examples CREATE EXTENSION postgres_fdw; -- Create a connection to the other database on the same server CREATE SERVER pg_localhost_chinook FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '127.0.0.1', port '5432', dbname 'chinook') ; -- Create a user mapping CREATE USER MAPPING FOR stefanie SERVER pg_localhost_chinook OPTIONS (user 'stefanie', password 'password') ;
  • 18. Live Data examples -- Link foreign tables into the current database and schema IMPORT FOREIGN SCHEMA public LIMIT TO("Track") FROM SERVER pg_localhost_chinook INTO public ; -- Try to select some data SELECT * FROM "Track";
  • 19. Live Data examples -- Join SQLite, MariaDB, and PostgreSQL tables SELECT artist."Name" , album."Title" , track."Name" FROM sqlite_artist AS artist INNER JOIN mysql_album AS album ON artist."ArtistId" = album."ArtistId" INNER JOIN "Track" AS track ON album."AlbumId" = track."AlbumId" ;
  • 20. Live Data examples CREATE EXTENSION file_fdw; -- One does need a server, but afterwards every csv file is avilable CREATE SERVER chinook_csv FOREIGN DATA WRAPPER file_fdw ; -- Creating a foreign table based on a csv file -- Options are the same as in COPY CREATE FOREIGN TABLE csv_genre ( "GenreId" integer, "Name" text ) SERVER chinook_csv OPTIONS ( filename '/var/tmp/Genre.csv', format 'csv', HEADER 'true' );
  • 21. Live Data examples -- Select some data SELECT * FROM csv_genre;
  • 22. Live Data examples -- Join SQLite, MariaDB, PostgreSQL, and CSV tables SELECT artist."Name" , album."Title" , track."Name" , genre."Name" FROM sqlite_artist AS artist INNER JOIN mysql_album AS album ON artist."ArtistId" = album."ArtistId" INNER JOIN "Track" AS track ON album."AlbumId" = track."AlbumId" INNER JOIN csv_genre AS genre ON track."GenreId" = genre."GenreId" ;
  • 23. Live Data examples -- Joining SQLite and MariaDB tables using PostgreSQL expressions WITH album AS ( SELECT "ArtistId" , array_agg("Title") AS album_titles FROM mysql_album GROUP BY "ArtistId" ) SELECT artist."Name" AS artist , album.album_titles FROM sqlite_artist AS artist INNER JOIN album ON artist."ArtistId" = album."ArtistId" ;
  • 24. Live Data examples -- Creates an materialized view on foreign tables CREATE MATERIALIZED VIEW mv_album_artist AS WITH album AS ( SELECT "ArtistId" , array_agg("Title") AS album_titles FROM mysql_album GROUP BY "ArtistId" ) SELECT artist."Name" AS artist , album.album_titles , SUM(ARRAY_LENGTH(album_titles, 1)) FROM sqlite_artist AS artist LEFT OUTER JOIN album ON artist."ArtistId" = album."ArtistId" GROUP BY artist."Name" , album.album_titles ;
  • 25. Live Data examples -- Select the mv data SELECT * FROM mv_album_artist WHERE upper(artist) LIKE 'A%' ORDER BY artist ;
  • 26. Live Data examples -- SELECT the amount of albums from the MariaDB table from MariaDB, not with a foreign data wrapper SELECT count( * ) AS AlbumCount FROM `Album` ;
  • 27. Live Data examples -- Insert data calculated from foreign tables using PostgreSQL features into another foreign table INSERT INTO mysql_album("AlbumId", "ArtistId", "Title") WITH album AS ( -- Generate a new album id SELECT MAX(album."AlbumId") + 1 AS new_album_id FROM mysql_album AS album ) SELECT album.new_album_id , artist."ArtistId" , 'Back in Black' FROM sqlite_artist AS artist, album WHERE artist."Name" = 'AC/DC' GROUP BY album.new_album_id , artist."ArtistId" ;
  • 28. Live Data examples -- SELECT the amount of albums from the MariaDB table from MariaDB, not with a foreign data wrapper SELECT count( * ) AS AlbumCount FROM `Album` ;
  • 29. Live Data examples -- Select data from the materialized view SELECT * FROM mv_album_artist WHERE artist = 'AC/DC' ORDER BY artist ; -- Refresh the mv to see the recently added data REFRESH MATERIALIZED VIEW mv_album_artist; -- We can even delete data from foreign tables DELETE FROM mysql_album WHERE "Title" = 'Back in Black' AND "ArtistId" = 1 ;
  • 30. Live Data examples -- Using PostgreSQL JSON with data from MariaDB and SQLite -- Step 1: Albums with tracks as JSON WITH albums AS ( SELECT a."ArtistId" AS artist_id , a."Title" AS album_title , array_agg(t."Name") AS album_tracks FROM mysql_album AS a INNER JOIN "Track" AS t ON a."AlbumId" = t."AlbumId" GROUP BY a."ArtistId" , a."Title" ) SELECT row_to_json(albums) AS album_tracks FROM albums ;
  • 31. Live Data examples -- Albums including tracks with aritsts with some JSON magic WITH albums AS ( SELECT a."ArtistId" AS artist_id , a."Title" AS album_title , array_agg(t."Name") AS album_tracks FROM mysql_album AS a INNER JOIN "Track" AS t ON a."AlbumId" = t."AlbumId" GROUP BY a."ArtistId" , a."Title" ) , js_albums AS ( SELECT row_to_json(albums) AS album_tracks FROM albums ) SELECT a."Name" AS artist , jsonb_pretty(al.album_tracks::jsonb) AS albums_tracks FROM sqlite_artist AS a INNER JOIN js_albums AS al ON a."ArtistId" = (al.album_tracks→>'artist_id')::int ;
  • 33. Live Data examples -- Create the multicorn extension CREATE EXTENSION multicorn;
  • 34. Live Data examples CREATE SERVER rss_srv foreign data wrapper multicorn options ( wrapper 'multicorn.rssfdw.RssFdw' ) ;
  • 35. Live Data examples -- Create a foreign table based on an RSS feed CREATE FOREIGN TABLE rss_yahoo_entertainment ( "pubDate" timestamp, description character varying, title character varying, link character varying ) server rss_srv options ( url 'http://news.yahoo.com/rss/entertainment' ) ;
  • 36. Live Data examples -- Query that RSS feed SELECT * FROM rss_yahoo_entertainment ;
  • 37. Live Data examples -- Query that RSS feed with an expression SELECT * FROM rss_yahoo_entertainment WHERE lower(title) LIKE '%gawker%' ;
  • 38. Link List PGXN Extensions: - mysql_fdw, MySQL/MariaDB FDW - sqlite_fdw, SQLite FDW Slide and source on Github: https://github.com/sjstoelting/talks
  • 39. One Database To Rule 'em All This document by Stefanie Janine Stölting is covered by the Creative Commons Attribution 4.0 International

Editor's Notes

  1. Some BI Tools don‘t detect foreign data tables. This extension solves the problem.