# Робота з даними: Нереляційні дані |![Скетчноут від [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/06-NoSQL.png)| |:---:| |Робота з даними NoSQL - _Скетчноут від [@nitya](https://twitter.com/nitya)_| ## [Тест перед лекцією](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/10) Дані не обмежуються лише реляційними базами даних. У цьому уроці ми зосередимося на нереляційних даних і розглянемо основи роботи з електронними таблицями та NoSQL. ## Електронні таблиці Електронні таблиці є популярним способом зберігання та аналізу даних, оскільки вони потребують мінімальних зусиль для налаштування та початку роботи. У цьому уроці ви дізнаєтеся про основні компоненти електронної таблиці, а також про формули та функції. Приклади будуть ілюстровані за допомогою Microsoft Excel, але більшість частин і тем матимуть схожі назви та кроки в інших програмах для роботи з таблицями. ![Порожня робоча книга Microsoft Excel з двома робочими аркушами](../../../../translated_images/parts-of-spreadsheet.120711c82aa18a45c3e62a491a15bba0a31ab0e9db407ec022702fed8ffd89bf.uk.png) Електронна таблиця — це файл, який буде доступний у файловій системі комп’ютера, пристрою або хмарній файловій системі. Саме програмне забезпечення може бути браузерним або додатком, який потрібно встановити на комп’ютер чи завантажити як додаток. У Excel ці файли також визначаються як **робочі книги**, і ця термінологія буде використовуватися протягом усього уроку. Робоча книга містить один або кілька **робочих аркушів**, кожен з яких позначений вкладками. У робочому аркуші є прямокутники, які називаються **комірками**, і вони містять фактичні дані. Комірка — це перетин рядка та стовпця, де стовпці позначені алфавітними символами, а рядки — числовими. Деякі електронні таблиці містять заголовки в перших кількох рядках, щоб описати дані в комірці. З цими базовими елементами робочої книги Excel ми використаємо приклад із [Microsoft Templates](https://templates.office.com/), зосереджений на інвентаризації, щоб розглянути деякі додаткові частини електронної таблиці. ### Управління інвентарем Файл електронної таблиці під назвою "InventoryExample" — це форматована таблиця предметів в інвентарі, яка містить три робочі аркуші, вкладки яких позначені як "Inventory List", "Inventory Pick List" і "Bin Lookup". Рядок 4 робочого аркуша Inventory List є заголовком, який описує значення кожної комірки в заголовковому стовпці. ![Виділена формула з прикладу списку інвентаря в Microsoft Excel](../../../../translated_images/formula-excel.ad1068c220892f5ead570d12f2394897961d31a5043a1dd4e6fc5d7690c7a14e.uk.png) Іноді значення комірки залежить від значень інших комірок для генерації свого значення. Електронна таблиця Inventory List відстежує вартість кожного предмета в інвентарі, але що, якщо нам потрібно знати загальну вартість всього інвентаря? [**Формули**](https://support.microsoft.com/en-us/office/overview-of-formulas-34519a4e-1e8d-4f4b-84d4-d642c4f63263) виконують дії над даними комірок і використовуються для обчислення вартості інвентаря в цьому прикладі. У цій таблиці використовується формула в стовпці Inventory Value для обчислення вартості кожного предмета шляхом множення кількості під заголовком QTY і його вартості під заголовком COST. Подвійне клацання або виділення комірки покаже формулу. Ви помітите, що формули починаються зі знака рівності, за яким слідує обчислення або операція. ![Виділена функція з прикладу списку інвентаря в Microsoft Excel](../../../../translated_images/function-excel.be2ae4feddc10ca089f3d4363040d93b7fd046c8d4f83ba975ec46483ee99895.uk.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 різними значеннями](../../../../translated_images/kv-db.e8f2b75686bbdfcba0c827b9272c10ae0821611ea0fe98429b9d13194383afa6.uk.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/) із відповідною хеш-функцією. ![Графічне представлення графової бази даних, що показує зв’язки між людьми, їхніми інтересами та місцями](../../../../translated_images/graph-db.d13629152f79a9dac895b20fa7d841d4d4d6f6008b1382227c3bbd200fd4cfa1.uk.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](../../../../translated_images/columnar-db.ffcfe73c3e9063a8c8f93f8ace85e1200863584b1e324eb5159d8ca10f62ec04.uk.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](../../../../translated_images/cosmosdb-emulator-explorer.a1c80b1347206fe2f30f88fc123821636587d04fc5a56a9eb350c7da6b31f361.uk.png) Якщо ви слідуєте інструкціям, натисніть "Start with Sample", щоб створити зразкову базу даних під назвою SampleDB. Якщо ви розгорнете SampleDB, натиснувши стрілку, ви знайдете контейнер під назвою `Persons`. Контейнер містить колекцію елементів, які є документами всередині контейнера. Ви можете дослідити чотири окремі документи під `Items`. ![Дослідження зразкових даних у емуляторі Cosmos DB](../../../../translated_images/cosmosdb-emulator-persons.bf640586a7077c8985dfd3071946465c8e074c722c7c202d6d714de99a93b90a.uk.png) #### Запити документних даних за допомогою емулятора Cosmos DB Ми також можемо виконувати запити до зразкових даних, натиснувши кнопку нового SQL-запиту (друга кнопка зліва). `SELECT * FROM c` повертає всі документи в контейнері. Додамо умову WHERE і знайдемо всіх, хто молодший за 40 років. `SELECT * FROM c where c.age < 40` ![Виконання SELECT-запиту до зразкових даних у емуляторі Cosmos DB для пошуку документів, у яких значення поля age менше 40](../../../../translated_images/cosmosdb-emulator-persons-query.6905ebb497e3cd047cd96e55a0a03f69ce1b91b2b3d8c147e617b746b22b7e33.uk.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://purple-hill-04aebfb03.1.azurestaticapps.net/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). Хоча ми прагнемо до точності, звертаємо вашу увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується звертатися до професійного людського перекладу. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.