ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ SQL Backend

Π Π΅ΠΆΠΈΠΌ SQL Backend ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с In-memory:

  1. НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рСдактирования строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ запроса строка Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° ViQube(In-memory) ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ SQL Backend.

  2. Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ отличия ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с NULL Π² выраТСниях (ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ViQube(In-memory)):

    • Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ сравнСния с NULL Π² случаС ViQube(In-memory) Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ FALSE, Π° Π² случаС ViQube(SQL Backend) Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ NULL

    • ΠŸΡ€ΠΈ арифмСтичСских опСрациях NULL Π² ViQube(In-memory) интСрпрСтируСтся ΠΊΠ°ΠΊΒ (1+NULL =1), Π° Π² SQL-Π±Π°Π·Π΅ ΠΊΠ°ΠΊ UNDEFINED (1+NULL =NULL )

  3. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ спСцифика ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

    • Π’Β PostgreSQL Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Β sum(boolean). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ отличия Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ расчСтных ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

    • Π’ Oracle Π½Π΅Ρ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Boolean. Π’ ViQube Ρ‚Π°ΠΊΠΈΠ΅ поля Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ цСлочислСнныС (0/1). По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ логичСскиС выраТСния Π² сформированном SQL-запросС.

  4. ИспользованиС VERTICA:

    • Π’ VERTICA ΠΏΡ€ΠΈ сортировкС ΠΏΠΎ полю Π½Π΅Ρ‚ возмоТности ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ сортировки NULL-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² NULL FIRST/LAST). ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ строк ΠΏΡ€ΠΈ сортировкС ΠΏΠΎΠ»Π΅ΠΉ с NULL-значСниями зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° сортируСмых Π΄Π°Π½Π½Ρ‹Ρ….

  5. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ использования MySQL:

    • НСт возмоТности ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ NULL-значСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² MySQL Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ NULLS FIRST ΠΈ NULLS LAST.

    • Для получСния разности Π΄Π°Ρ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DATEDIFF вмСсто date1 - date2. НапримСр: SELECT SUM(DATEDIFF(period2_id, period_id)) AS `0-0` FROM `fact_rur`

    • На запросы с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ гранулярности Π“ΠΎΠ΄ Π·Π° нСдСлю приходят значСния Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ΄ ΠΈ нСдСлю Π² Π³ΠΎΠ΄Ρƒ.

    • Иногда приходят Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° запросы, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… присутствуСт сравнСниС строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ это связано с ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… MySQL, ΠΎΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² ViQube.

  6. Если источником Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ являСтся внСшняя Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΏΡ€ΠΈ экспортС этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ· ViQube, Π΄Π°Π½Π½Ρ‹Π΅, хранящиСся Π²ΠΎ внСшнСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚. Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ внСсСны Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ViQube.

  7. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΡΠ°ΡŽΡ‰Π΅Π΅ΡΡ использования MS SQL:

    • ΠŸΡ€ΠΈ использовании MS SQL, для получСния Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π΄Π°Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DATEDIFF(date1, date2). ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ получСния Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вычитания date1-date2, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка.