Есть ли способ добиться кольцевых объединений в MariaDB ColumnStore, поскольку он не поддерживается? - PullRequest
1 голос
/ 08 июля 2019

Я использую MariaDB ColumnStore и в ColumnStore, Круговые объединения не поддерживаются.

В моей базе данных есть данные об измерениях, отправленных из разных стран и клиентов.

Так что для разных ролей мне нужно иметь возможность фильтровать данные внутри представления.

Итак, эта структура у меня сейчас

TABLE Measurements:

Country    Customer    Measurement
  a           1           150
  a           2           200
  b           3           250

У меня естьтаблица, которая отображает пользователей на роли

 TABLE UsersToRoles:

 Users      Roles 
   x        role1
   y        role2

У меня есть таблица, которая отображает роли на данные, которые ему разрешено видеть

TABLE RolesToData

Roles  VariableType  VariableValue
role1  Country         a
role1  Customer        1
role1  Customer        2
role2  Country         b
role2  Customer        3

Я создал следующий RoleView

 CREATE VIEW RoleView AS (
 SELECT UsersToRoles.User, Country, Customer FROM UsersToRoles.users AS User,  
 Country.VariableValue AS 'Country' FROM 
 ((UsersToRoles JOIN RolesToData Country ON (UsersToRoles.Roles = 
 Country.Roles AND Country.VariableType = 'Country'))
 JOIN RolesToData Customer ON (UsersToRoles.Roles = Customer.Roles AND 
 Customer.VariableType = 'Customer')))

, который возвращает следующий VIEW

User    Country    Customer
 x        a           1  
 x        a           2 
 y        b           3

Затем я хотел бы объединить таблицу измерений с RoleView как для страны, так и для клиента, например

  CREATE VIEW FinalView AS (SELECT measurement.* FROM measurement JOIN RoleView ON 
 (measurement.country = RoleView.country AND measurement.customer = RoleView.customer))     

Проблема заключается в том, чтоMariaDB ColumnStore не поддерживает циклические объединения.

Есть ли способ обойти кольцевые объединения без выполнения кругового соединения?

Возможно, путем создания нескольких представлений и выполнения левого или правого объединений для каждогоПосмотреть?

Был бы очень признателен, если бы нашел решение этой проблемы.

РЕДАКТИРОВАТЬ: ОБНОВЛЕНИЕ

Мне удалось быстро найти решение, яне уверен, будет ли это иметь серьезное влияние или нет.

Если вы используете CONCAT для одного из условий соединения, оно работает.

  CREATE VIEW FinalView AS (SELECT measurement.* FROM measurement JOIN 
  RoleView ON 
  (measurement.country = CONCAT(RoleView.country,"") AND measurement.customer = 
  RoleView.customer))

Это основано на комментарии Андрея в этой теме

https://jira.mariadb.org/browse/MCOL-1205

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...