# Робота з даними: Нереляційні дані |![Скетчноут від [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/06-NoSQL.png)| |:---:| |Робота з даними NoSQL - _Скетчноут від [@nitya](https://twitter.com/nitya)_ | ## [Тест перед лекцією](https://ff-quizzes.netlify.app/en/ds/quiz/10) Дані не обмежуються лише реляційними базами даних. У цьому уроці ми зосередимося на нереляційних даних і розглянемо основи роботи з електронними таблицями та NoSQL. ## Електронні таблиці Електронні таблиці є популярним способом зберігання та аналізу даних, оскільки вони потребують мінімальних зусиль для налаштування та початку роботи. У цьому уроці ви дізнаєтеся про основні компоненти електронної таблиці, а також про формули та функції. Приклади будуть ілюстровані за допомогою Microsoft Excel, але більшість частин і тем матимуть схожі назви та кроки в порівнянні з іншими програмами для роботи з таблицями. ![Порожня робоча книга Microsoft Excel з двома робочими аркушами](../../../../2-Working-With-Data/06-non-relational/images/parts-of-spreadsheet.png) Електронна таблиця — це файл, який буде доступний у файловій системі комп’ютера, пристрою або хмарній файловій системі. Саме програмне забезпечення може бути браузерним або додатком, який потрібно встановити на комп’ютер чи завантажити як додаток. У Excel ці файли також визначаються як **робочі книги**, і ця термінологія буде використовуватися протягом усього уроку. Робоча книга містить один або кілька **робочих аркушів**, кожен з яких позначений вкладками. У робочому аркуші є прямокутники, які називаються **комірками**, і вони містять фактичні дані. Комірка — це перетин рядка та стовпця, де стовпці позначені алфавітними символами, а рядки — числовими. Деякі електронні таблиці містять заголовки в перших кількох рядках, щоб описати дані в комірці. З цими базовими елементами робочої книги Excel ми використаємо приклад із [Microsoft Templates](https://templates.office.com/), зосереджений на інвентаризації, щоб розглянути деякі додаткові частини електронної таблиці. ### Управління інвентарем Файл електронної таблиці під назвою "InventoryExample" — це форматована таблиця предметів в інвентарі, яка містить три робочі аркуші, де вкладки позначені як "Inventory List", "Inventory Pick List" і "Bin Lookup". Рядок 4 робочого аркуша Inventory List — це заголовок, який описує значення кожної комірки в заголовковому стовпці. ![Виділена формула з прикладу списку інвентаря в Microsoft Excel](../../../../2-Working-With-Data/06-non-relational/images/formula-excel.png) Іноді значення комірки залежить від значень інших комірок для генерації свого значення. Електронна таблиця Inventory List відстежує вартість кожного предмета в інвентарі, але що, якщо нам потрібно знати загальну вартість всього інвентаря? [**Формули**](https://support.microsoft.com/en-us/office/overview-of-formulas-34519a4e-1e8d-4f4b-84d4-d642c4f63263) виконують дії над даними комірок і використовуються для обчислення вартості інвентаря в цьому прикладі. У цій таблиці використовується формула в стовпці Inventory Value для обчислення вартості кожного предмета шляхом множення кількості під заголовком QTY і його вартості під заголовком COST. Подвійне клацання або виділення комірки покаже формулу. Ви помітите, що формули починаються зі знака рівності, за яким слідує обчислення або операція. ![Виділена функція з прикладу списку інвентаря в Microsoft Excel](../../../../2-Working-With-Data/06-non-relational/images/function-excel.png) Ми можемо використати іншу формулу, щоб додати всі значення Inventory Value разом і отримати їх загальну вартість. Це можна обчислити, додаючи кожну комірку для отримання суми, але це може бути трудомістким завданням. Excel має [**функції**](https://support.microsoft.com/en-us/office/sum-function-043e1c7d-7726-4e80-8f32-07b23e057f89), або попередньо визначені формули для виконання обчислень над значеннями комірок. Функції потребують аргументів, які є необхідними значеннями для виконання цих обчислень. Коли функції потребують більше одного аргументу, їх потрібно перерахувати в певному порядку, інакше функція може не обчислити правильне значення. У цьому прикладі використовується функція SUM, і використовуються значення Inventory Value як аргумент для додавання, щоб отримати загальну суму, зазначену в рядку 3, стовпці B (також відомому як B3). ## NoSQL NoSQL — це загальний термін для різних способів зберігання нереляційних даних і може інтерпретуватися як "не SQL", "нереляційний" або "не тільки SQL". Ці типи систем баз даних можна класифікувати на 4 типи. ![Графічне представлення сховища даних типу ключ-значення, що показує 4 унікальні числові ключі, які асоціюються з 4 різними значеннями](../../../../2-Working-With-Data/06-non-relational/images/kv-db.png) > Джерело: [Блог Michał Białecki](https://www.michalbialecki.com/2018/03/18/azure-cosmos-db-key-value-database-cloud/) [Ключ-значення](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#keyvalue-data-stores) бази даних поєднують унікальні ключі, які є унікальним ідентифікатором, пов’язаним зі значенням. Ці пари зберігаються за допомогою [хеш-таблиці](https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/) із відповідною хеш-функцією. ![Графічне представлення графової бази даних, що показує зв’язки між людьми, їхніми інтересами та місцями](../../../../2-Working-With-Data/06-non-relational/images/graph-db.png) > Джерело: [Microsoft](https://docs.microsoft.com/en-us/azure/cosmos-db/graph/graph-introduction#graph-database-by-example) [Графові](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#graph-data-stores) бази даних описують зв’язки в даних і представлені як колекція вузлів і ребер. Вузол представляє сутність, щось, що існує в реальному світі, наприклад, студент або банківська виписка. Ребра представляють зв’язок між двома сутностями. Кожен вузол і ребро мають властивості, які надають додаткову інформацію про кожен вузол і ребро. ![Графічне представлення колонкової бази даних, що показує базу даних клієнтів із двома групами колонок, названими Identity та Contact Info](../../../../2-Working-With-Data/06-non-relational/images/columnar-db.png) [Колонкові](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#columnar-data-stores) сховища даних організовують дані в стовпці та рядки, як реляційна структура даних, але кожен стовпець розділений на групи, які називаються колонковими сімействами, де всі дані під одним стовпцем пов’язані та можуть бути отримані або змінені як одна одиниця. ### Документні сховища даних із Azure Cosmos DB [Документні](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#document-data-stores) сховища даних базуються на концепції сховища даних типу ключ-значення та складаються з серії полів і об’єктів. У цьому розділі ми дослідимо документні бази даних за допомогою емулятора Cosmos DB. База даних Cosmos DB відповідає визначенню "не тільки SQL", де документна база даних Cosmos DB використовує SQL для запитів даних. [Попередній урок](../05-relational-databases/README.md) про SQL охоплює основи мови, і ми зможемо застосувати деякі з тих самих запитів до документної бази даних тут. Ми будемо використовувати емулятор Cosmos DB, який дозволяє створювати та досліджувати документну базу даних локально на комп’ютері. Дізнайтеся більше про емулятор [тут](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21). Документ — це колекція полів і значень об’єктів, де поля описують, що представляє значення об’єкта. Нижче наведено приклад документа. ```json { "firstname": "Eva", "age": 44, "id": "8c74a315-aebf-4a16-bb38-2430a9896ce5", "_rid": "bHwDAPQz8s0BAAAAAAAAAA==", "_self": "dbs/bHwDAA==/colls/bHwDAPQz8s0=/docs/bHwDAPQz8s0BAAAAAAAAAA==/", "_etag": "\"00000000-0000-0000-9f95-010a691e01d7\"", "_attachments": "attachments/", "_ts": 1630544034 } ``` Поля, які нас цікавлять у цьому документі: `firstname`, `id` і `age`. Решта полів із підкресленнями були згенеровані Cosmos DB. #### Дослідження даних за допомогою емулятора Cosmos DB Ви можете завантажити та встановити емулятор [для Windows тут](https://aka.ms/cosmosdb-emulator). Ознайомтеся з цією [документацією](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21#run-on-linux-macos) для варіантів запуску емулятора на macOS і Linux. Емулятор запускає вікно браузера, де у вигляді Explorer можна досліджувати документи. ![Вигляд Explorer емулятора Cosmos DB](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-explorer.png) Якщо ви слідуєте інструкціям, натисніть "Start with Sample", щоб створити зразкову базу даних під назвою SampleDB. Якщо ви розгорнете SampleDB, натиснувши стрілку, ви знайдете контейнер під назвою `Persons`. Контейнер містить колекцію елементів, які є документами в контейнері. Ви можете дослідити чотири окремі документи під `Items`. ![Дослідження зразкових даних у емуляторі Cosmos DB](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons.png) #### Запити документних даних за допомогою емулятора Cosmos DB Ми також можемо виконувати запити до зразкових даних, натиснувши кнопку нового SQL-запиту (друга кнопка зліва). `SELECT * FROM c` повертає всі документи в контейнері. Додамо умову WHERE і знайдемо всіх, хто молодший за 40 років. `SELECT * FROM c where c.age < 40` ![Виконання запиту SELECT до зразкових даних у емуляторі Cosmos DB для пошуку документів, у яких значення поля age менше 40](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons-query.png) Запит повертає два документи, зверніть увагу, що значення age для кожного документа менше 40. #### JSON і документи Якщо ви знайомі з JavaScript Object Notation (JSON), ви помітите, що документи виглядають схожими на JSON. У цьому каталозі є файл `PersonsData.json` із додатковими даними, які ви можете завантажити в контейнер Persons в емуляторі за допомогою кнопки `Upload Item`. У більшості випадків API, які повертають дані у форматі JSON, можуть бути безпосередньо передані та збережені в документних базах даних. Нижче наведено ще один документ, який представляє твіти з облікового запису Microsoft у Twitter, отримані за допомогою API Twitter, а потім вставлені в Cosmos DB. ```json { "created_at": "2021-08-31T19:03:01.000Z", "id": "1432780985872142341", "text": "Blank slate. Like this tweet if you’ve ever painted in Microsoft Paint before. https://t.co/cFeEs8eOPK", "_rid": "dhAmAIUsA4oHAAAAAAAAAA==", "_self": "dbs/dhAmAA==/colls/dhAmAIUsA4o=/docs/dhAmAIUsA4oHAAAAAAAAAA==/", "_etag": "\"00000000-0000-0000-9f84-a0958ad901d7\"", "_attachments": "attachments/", "_ts": 1630537000 ``` Поля, які нас цікавлять у цьому документі: `created_at`, `id` і `text`. ## 🚀 Виклик У цьому каталозі є файл `TwitterData.json`, який ви можете завантажити в базу даних SampleDB. Рекомендується додати його до окремого контейнера. Це можна зробити наступним чином: 1. Натисніть кнопку нового контейнера у верхньому правому куті. 1. Виберіть існуючу базу даних (SampleDB), створіть ідентифікатор контейнера. 1. Встановіть ключ розділу на `/id`. 1. Натисніть OK (ви можете ігнорувати решту інформації в цьому вигляді, оскільки це невеликий набір даних, який працює локально на вашому комп’ютері). 1. Відкрийте новий контейнер і завантажте файл Twitter Data за допомогою кнопки `Upload Item`. Спробуйте виконати кілька запитів SELECT, щоб знайти документи, які містять слово "Microsoft" у полі text. Підказка: спробуйте використати [ключове слово LIKE](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/sql-query-keywords#using-like-with-the--wildcard-character). ## [Тест після лекції](https://ff-quizzes.netlify.app/en/ds/quiz/11) ## Огляд і самостійне навчання - У цій електронній таблиці є додаткове форматування та функції, які не розглядаються в цьому уроці. Microsoft має [велику бібліотеку документації та відео](https://support.microsoft.com/excel) про Excel, якщо вам цікаво дізнатися більше. - Ця архітектурна документація описує характеристики різних типів нереляційних даних: [Нереляційні дані та NoSQL](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data). - Cosmos DB — це хмарна нереляційна база даних, яка також може зберігати різні типи NoSQL, згадані в цьому уроці. Дізнайтеся більше про ці типи в цьому [модулі Microsoft Learn про Cosmos DB](https://docs.microsoft.com/en-us/learn/paths/work-with-nosql-data-in-azure-cosmos-db/). ## Завдання [Soda Profits](assignment.md) --- **Відмова від відповідальності**: Цей документ був перекладений за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.