Почему некоторые столбцы содержат пустые значения при выполнении пользовательского запроса SQL в Tableau Prep и как я могу получить правильные (непустые) значения? - PullRequest
1 голос
/ 29 апреля 2020

Немного предыстории ... Мы пытаемся подключиться к базе данных MySQL и извлечь информацию о пациенте. В Tableau Prep мы успешно подключаемся к базе данных, затем создаем пользовательский ввод SQL. Пользовательский запрос выбирает значения из столбца таблицы, содержащей зашифрованные данные. Обычно при извлечении этих данных в других ситуациях (например, в нашем внутреннем коде) мы расшифровываем их как часть запроса SELECT, используя AES_DECRYPT. Этот запрос обычно выглядит следующим образом (иногда полей будет больше, чем это, но все они будут следовать одному и тому же общему шаблону):

SELECT CAST(AES_DECRYPT(UNHEX(`myfield`), 'ThisIsWhereTheKeyWouldGo') AS CHAR) AS myfield FROM `mytable`

Эти имена и любые значения ниже являются просто примерами между прочим .. Я не могу делиться фактическими данными или именами из соображений конфиденциальности. При этом, когда я запускаю этот запрос в MySQL верстаке, результатом является столбец с непустыми строковыми, ненулевыми значениями, которые я ожидаю (за исключением, конечно, если значение фактически нулевое для начала). Это верно для любого столбца, в котором я его запускаю, который содержит зашифрованные значения, независимо от длины зашифрованной строки. Т.е. результат выглядит примерно так ...

+-----------------------------------+
|             myfield               |
+-----------------------------------+
| somedata                          |
| alsodata                          |
| moredata                          |
| ...etc.                           |
+-----------------------------------+

Однако, когда я копирую запрос EXACT SAME и вставляю его в пользовательское окно Tableau SQL, а затем запускаю его, я получаю пустые строковые значения (не нулевые значения, а пустые .... И Tableau делает различие между ними). Не ошибка в поле зрения. Это верно почти для каждого столбца в моей таблице. В основном я получаю

+-----------------------------------+
|             myfield               |
+-----------------------------------+
|                                   |
|                                   |
|                                   |
|                                   |
+-----------------------------------+

Заметьте, я сказал почти все, однако. Это потому, что в ТАКОЙ ЖЕ ТОЧНОЙ ТАБЛИЦЕ есть столбцы, для которых я запускаю этот запрос в Таблице и получаю ожидаемые ненулевые, непустые строки.

Это очень озадачивает меня. Я изо всех сил пытаюсь понять, почему Tableau может извлекать некоторые столбцы без проблем, а другие - без пустых строк.

Я также пытаюсь понять, является ли это ограничением самой нашей базы данных, или если В Tableau есть ошибка.

Я также провел некоторую перекрестную проверку, и беглый взгляд говорит мне, что ТОЛЬКО значения, которые изначально были ненулевыми в исходных данных, отображаются как пустые строки в результатах Таблицы. Единственные нулевые значения в результатах Таблицы получены из значений, которые в любом случае изначально были нулевыми в исходных данных.

Я также проверил, имеет ли значение длина строки (значения, которые возвращаются как пустые строки несколько длинны в исходной базе данных, и я подозревал, что они могли быть усечены до расшифровки). Я скопировал данные из одного из столбцов, где все значения были успешно получены моим запросом (не являются пустыми строками), и поместил их в столбец, который обычно возвращается в виде пустых строк. Эти данные все еще возвращались как пустые строки.

Итак, я должен предположить, что проблема с колонкой? Помимо вышесказанного, ЕДИНСТВЕННАЯ разница в столбцах, которые расшифровываются правильно, и столбцах, которые не являются типом. Правильно расшифрованные столбцы - это varchar, а столбцы - без длинного текста.

В настоящий момент это неосуществимо для меня (и я не думаю, что у меня есть привилегии на самом деле ....) изменить тип данных проблемных столбцов c и посмотреть, в этом ли проблема. Конечно, я пытался сделать это на своей локальной машине / в локальной базе данных, но, к сожалению, некоторые поиски и попытки показывают, что только для Tableau Prep возможно подключиться к моей локальной MySQL базе данных с помощью Tableau Bridge, которая доступна только для Windows. К сожалению, моя рабочая станция - Macbook.

Мне все еще кажется странным, что запрос работает последовательно в MySQL workbench, но не в Tableau Prep.

Поэтому мне интересно, была ли у кого-то еще проблема, подобная этой, и что вы сделали, чтобы обойти ее. Мне очень трудно поверить, что я единственный в мире, кто когда-либо сталкивался с проблемами при подключении Tableau к базе данных MySQL и получении зашифрованных данных. Я был бы очень удивлен, если единственным обходным решением для этого является изменение всей нашей базы данных, чтобы избежать определенного типа данных, и я публикую здесь хотя бы частично, чтобы увидеть, есть ли другие вещи, которые я могу попробовать или проверить, о которых я не знаю, и только рекомендую, чтобы мы создали новую таблицу или изменили типы данных в текущей как абсолютное последнее средство.

Я также открыт для решений, которые используют Tableau Desktop, а не Tableau Prep. Это будет немного болезненно, но я справлюсь.

Мне также интересно, есть ли альтернатива опции пользовательского запроса Tableau Prep, такая как некоторый встроенный эквивалент функции AES_DECRYPT этого недостаточно, чтобы его можно было найти в любом из моих поисков в Google или на форуме ... Что-то, что я могу использовать для расшифровки ПОСЛЕ извлечения данных. Поскольку получение данных без попыток расшифровки работает нормально. EG

SELECT `myfield` FROM `mytable`

Возвращает непустые строки, как и ожидалось в Таблице, они просто все еще явно зашифрованы.

(И прежде чем кто-то скажет это, потому что я видел, как происходит запрос вещей) для людей, занятых здесь половину времени.

  • Я не контролирую наш выбор ОС, базы данных и т. д. c. Я просто скромный разработчик. Я ношу много Шляпы да, но у меня нет большинства окончательных решений в вещах.

  • Хранение незашифрованной копии этих данных не вариант и является юридической ответственностью для нас.

  • Да. Да, я несколько дней гуглял и искал форумы. Я должен быть АБСОЛЮТНО отчаянным, чтобы публиковать здесь. Это место пугает меня. На самом деле я не думаю, что на самом деле.)

Заранее спасибо за любую помощь.

Редактировать: если кому-то нужно знать, я использую Tableau Prep Builder 2020.1

...