This repository has been archived on 2024-09-20. You can view files and clone it, but cannot push or open issues or pull requests.
wdk/Anhang/Docker/data/jupyLab/Grundlagen.ipynb
2022-06-29 17:06:39 +02:00

243 lines
5.9 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "6801b26f-4bf6-46c0-8584-798ede2d0ff2",
"metadata": {},
"source": [
"# InfluxDB Grundlagen"
]
},
{
"cell_type": "markdown",
"id": "759f9eb6-5629-4e87-8c6a-043bcafc4f55",
"metadata": {},
"source": [
"Bevor mit InfluxDB gearbeitet werden kann, muss als erstes die Client Library importiert werden."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "43cf5e5c-9542-47ea-9205-89f97a217c51",
"metadata": {},
"outputs": [],
"source": [
"from datetime import datetime\n",
"\n",
"from influxdb_client import InfluxDBClient, Point, WritePrecision\n",
"from influxdb_client.client.write_api import SYNCHRONOUS"
]
},
{
"cell_type": "markdown",
"id": "03668637-f4eb-422d-8d36-e59b13e75ad1",
"metadata": {},
"source": [
"Im nächsten Schritt müssen die Verbindungsdaten angegeben werden. Ein API Token kann im InfluxDB Webinterface angelegt werden. Der Bucket wird automatisch erstellt. Es kann allerdings auch ein eigener Bucket verwendet werden.\n",
"Als URL muss darauf geachtet werden, die URL des Docker Containers zu nutzen, in dem die Datenbank ausgeführt wird. "
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "d6ae2ed0-3363-420f-81d5-56050591a50e",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"token = \"8TYGzTJhqCyKpspMp95Yk858DY2uMzj6wbexbFGMiaLjcG6caiQtNiBKOFlxXnYuEoduFqS9o6_q8UmP1eJC0w==\"\n",
"org = \"test-org\"\n",
"bucket = \"test-bucked\"\n",
"url = \"http://influxdb:8086\""
]
},
{
"cell_type": "markdown",
"id": "e4390ee6-e32c-4ef9-9e41-3bb47ee827fb",
"metadata": {},
"source": [
"Jetzt wird der InfluxDB Client erstellt."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "0a3d1adf-5c17-4aa6-8296-bd6bf0d78dc8",
"metadata": {},
"outputs": [],
"source": [
"client = InfluxDBClient(\n",
" url=url, \n",
" token=token,\n",
" org=org\n",
") "
]
},
{
"cell_type": "markdown",
"id": "ee8de7a5-722f-4b03-ab00-8aeea2f1a596",
"metadata": {},
"source": [
"## Daten in InfluxDB eintragen"
]
},
{
"cell_type": "markdown",
"id": "f6b75431-3767-46c4-85cd-baf0e772a9e3",
"metadata": {},
"source": [
"Um Daten zu schreiben, wird ein Write Client genutzt. Dieser kann aus dem Client erstellt werden."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "9015aa31-9bee-40db-b604-243c8f0b6ee9",
"metadata": {},
"outputs": [],
"source": [
"write_api = client.write_api(write_options=SYNCHRONOUS)"
]
},
{
"cell_type": "markdown",
"id": "038a43f6-4e70-407f-b7fe-9622178a7dbc",
"metadata": {},
"source": [
"Zu guter Letzt kann dann ein Datenpunkt mit Demodaten hochgeladen werden."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "7a557626-aaba-4ef4-8b4d-5ff2dd2840ef",
"metadata": {},
"outputs": [],
"source": [
"p = Point(\"my_measurement\").tag(\"location\", \"Prague\").field(\"temperature\", 25.3)\n",
"write_api.write(bucket=bucket, org=org, record=p)"
]
},
{
"cell_type": "markdown",
"id": "920bad93-6b76-4148-8e45-51954d895786",
"metadata": {},
"source": [
"# Daten aus InfluxDB abrufen"
]
},
{
"cell_type": "markdown",
"id": "94576801-e533-43f7-a12b-af435b0562a1",
"metadata": {},
"source": [
"Ähnlich wie zum schreiben von Daten, wird für das Abrufen von Daten ein extra Query Client benötigt."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "59aaa184-b140-432d-8132-cbb179ce4543",
"metadata": {},
"outputs": [],
"source": [
"query_api = client.query_api()"
]
},
{
"cell_type": "markdown",
"id": "237b7c4c-b92d-4a4b-9864-38c96be54967",
"metadata": {},
"source": [
"Um die abzurufenden Daten festzulegen, wird ein Flux Querry erstellt."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "cb28ce0d-5d9f-4090-a136-6fa7c8787974",
"metadata": {},
"outputs": [],
"source": [
"query = 'from(bucket:\"'+ bucket +'\")\\\n",
"|> range(start: -10m)\\\n",
"|> filter(fn:(r) => r._measurement == \"my_measurement\")\\\n",
"|> filter(fn: (r) => r.location == \"Prague\")\\\n",
"|> filter(fn:(r) => r._field == \"temperature\" )'"
]
},
{
"cell_type": "markdown",
"id": "140b5a02-f4d6-4b04-bd36-6ab8102a07fc",
"metadata": {},
"source": [
"Dieser Query kann dann mit dem Query Client ausgeführt werden."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "34975883-fa02-469f-8a2a-cc3464ae6c92",
"metadata": {},
"outputs": [],
"source": [
"result = query_api.query(org=org, query=query)"
]
},
{
"cell_type": "markdown",
"id": "9076f045-e22d-4923-93d0-abcfd1cc5251",
"metadata": {},
"source": [
"Mithilfe einer Schleife können die Datenpunkte jetzt durchgegangen werden. "
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "1c689c54-8215-41e3-97ca-6b6eed76d0fc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[('temperature', 25.3)]\n"
]
}
],
"source": [
"results = []\n",
"for table in result:\n",
" for record in table.records:\n",
" results.append((record.get_field(), record.get_value()))\n",
"\n",
"print(results)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}