Forum Discussion
Anonymous
6 years agoNot applicable
Problem retrieving MariaDB datas from Power BI Desktop
Hello, We've been struggling, for some time now, trying to retrieve our data from MariaDB databases with Power BI Desktop. I've tryed a lot of thing, but I can't get Power BI to retrieve correct...
gantonjo
4 years agoNew Member
The problem is the way PowerBI checks for foreign keys between tables. When loading a preview of a table, PowerBI starts the following query:
SELECT
A.REFERENCED_TABLE_SCHEMA PKTABLE_CAT,
NULL PKTABLE_SCHEM,
A.REFERENCED_TABLE_NAME PKTABLE_NAME,
A.REFERENCED_COLUMN_NAME PKCOLUMN_NAME,
A.TABLE_SCHEMA FKTABLE_CAT,
NULL FKTABLE_SCHEM,
A.TABLE_NAME FKTABLE_NAME,
A.COLUMN_NAME FKCOLUMN_NAME,
A.POSITION_IN_UNIQUE_CONSTRAINT KEY_SEQ,
CASE update_rule
WHEN 'RESTRICT' THEN 1
WHEN 'NO ACTION' THEN 3
WHEN 'CASCADE' THEN 0
WHEN 'SET NULL' THEN 2
WHEN 'SET DEFAULT' THEN 4
END UPDATE_RULE,
CASE DELETE_RULE
WHEN 'RESTRICT' THEN 1
WHEN 'NO ACTION' THEN 3
WHEN 'CASCADE' THEN 0
WHEN 'SET NULL' THEN 2
WHEN 'SET DEFAULT' THEN 4
END DELETE_RULE,
A.CONSTRAINT_NAME FK_NAME,
'PRIMARY' PK_NAME,
7 AS DEFERRABILITY
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE A
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE B ON
(B.TABLE_SCHEMA = A.REFERENCED_TABLE_SCHEMA
AND B.TABLE_NAME = A.REFERENCED_TABLE_NAME
AND B.COLUMN_NAME = A.REFERENCED_COLUMN_NAME)
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC ON
(RC.CONSTRAINT_NAME = A.CONSTRAINT_NAME
AND RC.TABLE_NAME = A.TABLE_NAME
AND RC.CONSTRAINT_SCHEMA = A.TABLE_SCHEMA)
WHERE
B.CONSTRAINT_NAME= 'PRIMARY'
AND A.TABLE_SCHEMA = BINARY 'SOMEDATABASE'
AND A.TABLE_NAME = BINARY 'sometable'
ORDER BY
FKTABLE_CAT,
FKTABLE_SCHEM,
FKTABLE_NAME,
KEY_SEQ,
PKTABLE_NAME;If you look at this query, you will see that it looks for (possibly missing) matches between all tables in the server, the table itself included. Even if the A.REFERENCED_% fields are empty (= NULL), the query looks for any possible matches to other tables in the server, causing an N^2 combination to look through. Similar for the REFERENTIAL_CONSTRAINTS. As you see, this quickly becomes a huge resultset to scan, even if the referenced A.column_names are empty.