En postgreSQL 9.5:file_fdw table étrangère et postgres_fdw table étrangère
J'ai une table étrangère nommée: sheetheight (créé par file_fdw) et une table étrangère nommée: dzlog (créé par postgres_fdw).
1- Pour se joindre à des tables étrangères J'ai requête suivante:
SELECT * from dzlog INNER JOIN sheetheight ON dzlog.ullid = sheetheight.ullid
;
et les EXPLAIN ANALYZE
retours en arrière ceci pour la requête ci-dessus:
-------------------------------------------------
Hash Join (cost=111.66..13688.18 rows=20814 width=2180) (actual time=7670.872.
.8527.844 rows=2499 loops=1)
Hash Cond: (sheetheight.ullid = dzlog.ullid)
-> Foreign Scan on sheetheight (cost=0.00..12968.10 rows=106741 width=150)
(actual time=0.116..570.571 rows=223986 loops=1)
Foreign File: D:\code\sources\sheetHeight_20151025_221244_0000000004987
6878996.csv
Foreign File Size: 18786370
-> Hash (cost=111.17..111.17 rows=39 width=2030) (actual time=7658.661..765
8.661 rows=34107 loops=1)
Buckets: 2048 (originally 1024) Batches: 32 (originally 1) Memory Usa
ge: 4082kB
-> Foreign Scan on dzlog (cost=100.00..111.17 rows=39 width=2030) (ac
tual time=47.162..7578.990 rows=34107 loops=1)
Planning time: 8.755 ms
Execution time: 8530.917 ms
(10 rows)
La sortie de requête ont deux colonnes nommées ullid.
ullid, la date, la couleur, sheetid, dz0, DZ1, DZ2, DZ3, DZ4, DZ5, dz6, DZ7, ullid, sheetid, passer ...
2- Pour directe accès au fichier csv et à la table locale sql de l'application python, j'ai: J'ai fait la même requête en n'utilisant pas les FDW mais l'accès direct au fichier csv et à la table locale postgreSQL d'une application python utilisant Pandas merge dataframe
. Cette liaison est cru rejoindre, je récupère d'abord le fichier csv puis chercher la table SQL en utilisant la bibliothèque de pandas géants de python, puis je fusionner les deux dataframes sur la base des colonnes communes
import pandas as pd
def rawjoin(query,connection=psycopg2.connect("dbname='mydb' user='qfsa' host='localhost' password='123' port=5433")):
query=("SELECT * FROM dzlog;")
firstTable= pd.read_csv('.\sources\sheetHeight_20151025_221244_000000000498768789.csv', delimiter=';', header=0)
secondTable =pd.read_sql(query,connection)
merged= pd.merge(firstTable, secondTable, on= 'ullid', how='inner')
return merged
Le résultat est les données jointes cadre avec une colonne ullide.
Une idée pour cette différence? Je l'ai fait d'autres types de jointures et le résultat d'un accès RAW et l'accès FDW sont les mêmes, d'autres questions sont les suivantes:
q7=("SELECT dzlog.color FROM dzlog,sheetheight WHERE dzlog.ullid = sheetheight.ullid;")
q8=("SELECT sheetheight.defectfound FROM dzlog, sheetheight WHERE dzlog.ullid = sheetheight.ullid;")
q9=("SELECT dzlog.color, sheetheight.defectfound FROM dzlog, sheetheight WHERE dzlog.ullid= sheetheight.ullid;")
Oui, la requête était le problème. votre requête est la bonne. – User193452