{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "11035b24-6195-412f-af98-50e41ce8b3d0", "metadata": {}, "outputs": [], "source": [ "from cassandra.cluster import Cluster\n", "cluster = Cluster([\"p6-db-1\", \"p6-db-2\", \"p6-db-3\"])\n", "cass = cluster.connect()" ] }, { "cell_type": "code", "execution_count": 2, "id": "480162ed-d618-4dde-bda6-03249f609a69", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<cassandra.cluster.ResultSet at 0x70c6d9b05330>" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cass.execute(\"use banking\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "ec630031-d518-4747-ac1f-8ec40aa43251", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<cassandra.cluster.ResultSet at 0x70c6d9b06500>" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cass.execute(\"\"\"\n", "create table loans (\n", " bank_id int,\n", " bank_name text STATIC,\n", " loan_id UUID,\n", " amount int,\n", " state text,\n", " PRIMARY KEY ((bank_id), amount, loan_id)\n", ") WITH CLUSTERING ORDER BY (amount DESC)\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "286ead09-fbf5-491d-831e-fb0056edd134", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE banking.loans (\n", " bank_id int,\n", " amount int,\n", " loan_id uuid,\n", " bank_name text static,\n", " state text,\n", " PRIMARY KEY (bank_id, amount, loan_id)\n", ") WITH CLUSTERING ORDER BY (amount DESC, loan_id ASC)\n", " AND additional_write_policy = '99p'\n", " AND allow_auto_snapshot = true\n", " AND bloom_filter_fp_chance = 0.01\n", " AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}\n", " AND cdc = false\n", " AND comment = ''\n", " AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}\n", " AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}\n", " AND memtable = 'default'\n", " AND crc_check_chance = 1.0\n", " AND default_time_to_live = 0\n", " AND extensions = {}\n", " AND gc_grace_seconds = 864000\n", " AND incremental_backups = true\n", " AND max_index_interval = 2048\n", " AND memtable_flush_period_in_ms = 0\n", " AND min_index_interval = 128\n", " AND read_repair = 'BLOCKING'\n", " AND speculative_retry = '99p';\n" ] } ], "source": [ "print(cass.execute(\"describe table loans\").one().create_statement)" ] }, { "cell_type": "code", "execution_count": 19, "id": "c4f6335b-6340-455e-921c-4b6ac2e1d67b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<cassandra.cluster.ResultSet at 0x70c6d17263e0>" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cass.execute(\"\"\"\n", "INSERT INTO loans (bank_id, bank_name)\n", "VALUES (544, 'test')\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 21, "id": "55c10edd-126d-4a10-98c8-708f2b337f99", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<cassandra.cluster.ResultSet at 0x70c6d9b056c0>" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# INSERT is actually UPSERT (insert or update)\n", "cass.execute(\"\"\"\n", "INSERT INTO loans (bank_id, bank_name)\n", "VALUES (544, 'test2')\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 22, "id": "99035291-59eb-4c00-99a1-9737d4e406d9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>bank_id</th>\n", " <th>amount</th>\n", " <th>loan_id</th>\n", " <th>bank_name</th>\n", " <th>state</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>544</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>test2</td>\n", " <td>None</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " bank_id amount loan_id bank_name state\n", "0 544 None None test2 None" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "pd.DataFrame(cass.execute(\"SELECT * FROM loans\"))" ] }, { "cell_type": "code", "execution_count": 24, "id": "896b8215-7282-4b73-9ad2-8f0761879253", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<cassandra.cluster.ResultSet at 0x70c6d1726830>" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cass.execute(\"\"\"\n", "INSERT INTO loans (bank_id, bank_name, loan_id, amount)\n", "VALUES (544, 'test2', UUID(), 300)\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 25, "id": "b8e2a46a-6e86-49ef-9d1c-0da26eec0a53", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>bank_id</th>\n", " <th>amount</th>\n", " <th>loan_id</th>\n", " <th>bank_name</th>\n", " <th>state</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>544</td>\n", " <td>300</td>\n", " <td>01976a29-7d80-435f-ba6b-e22abc9d10f3</td>\n", " <td>test2</td>\n", " <td>None</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " bank_id amount loan_id bank_name state\n", "0 544 300 01976a29-7d80-435f-ba6b-e22abc9d10f3 test2 None" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(cass.execute(\"SELECT * FROM loans\"))" ] }, { "cell_type": "code", "execution_count": 32, "id": "c87c69d1-4a9e-4065-9a95-8e47a08755c1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<cassandra.cluster.ResultSet at 0x70c6d3f9eec0>" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# NOW and UUID both generate UUIDs.\n", "# NOW is stronge because it uses MAC addresses and timestamps\n", "\n", "# this is both an INSERT (inserting a row) and UPDATE (on the partition)\n", "cass.execute(\"\"\"\n", "INSERT INTO loans (bank_id, bank_name, loan_id, amount, state)\n", "VALUES (544, 'mybank2', NOW(), 350, 'wi')\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 33, "id": "032cc612-c753-4bbe-bac3-ca5a8df6cd02", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>bank_id</th>\n", " <th>amount</th>\n", " <th>loan_id</th>\n", " <th>bank_name</th>\n", " <th>state</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>544</td>\n", " <td>400</td>\n", " <td>2b644550-0674-11f0-9e42-b531eb6d9b34</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>544</td>\n", " <td>350</td>\n", " <td>5c852cd0-0674-11f0-8b0a-b3bc8dc2bdb9</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>544</td>\n", " <td>300</td>\n", " <td>aebdb7c0-0673-11f0-8b0a-b3bc8dc2bdb9</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>544</td>\n", " <td>300</td>\n", " <td>f8c80870-0673-11f0-8acf-b5f913312dcb</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>544</td>\n", " <td>300</td>\n", " <td>01976a29-7d80-435f-ba6b-e22abc9d10f3</td>\n", " <td>mybank2</td>\n", " <td>None</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " bank_id amount loan_id bank_name state\n", "0 544 400 2b644550-0674-11f0-9e42-b531eb6d9b34 mybank2 wi\n", "1 544 350 5c852cd0-0674-11f0-8b0a-b3bc8dc2bdb9 mybank2 wi\n", "2 544 300 aebdb7c0-0673-11f0-8b0a-b3bc8dc2bdb9 mybank2 wi\n", "3 544 300 f8c80870-0673-11f0-8acf-b5f913312dcb mybank2 wi\n", "4 544 300 01976a29-7d80-435f-ba6b-e22abc9d10f3 mybank2 None" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(cass.execute(\"SELECT * FROM loans\"))" ] }, { "cell_type": "code", "execution_count": 34, "id": "d8142b23-c6c4-4b77-b5dd-8684c47c05c8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<cassandra.cluster.ResultSet at 0x70c6ad556e30>" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cass.execute(\"\"\"\n", "INSERT INTO loans (bank_id, bank_name, loan_id, amount, state)\n", "VALUES (999, 'uwcu', NOW(), 500, 'il')\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 35, "id": "b3b1ef23-db1a-43c8-b572-09a48f4aba41", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>bank_id</th>\n", " <th>amount</th>\n", " <th>loan_id</th>\n", " <th>bank_name</th>\n", " <th>state</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>544</td>\n", " <td>400</td>\n", " <td>2b644550-0674-11f0-9e42-b531eb6d9b34</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>544</td>\n", " <td>350</td>\n", " <td>5c852cd0-0674-11f0-8b0a-b3bc8dc2bdb9</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>544</td>\n", " <td>300</td>\n", " <td>aebdb7c0-0673-11f0-8b0a-b3bc8dc2bdb9</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>544</td>\n", " <td>300</td>\n", " <td>f8c80870-0673-11f0-8acf-b5f913312dcb</td>\n", " <td>mybank2</td>\n", " <td>wi</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>544</td>\n", " <td>300</td>\n", " <td>01976a29-7d80-435f-ba6b-e22abc9d10f3</td>\n", " <td>mybank2</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", " <td>999</td>\n", " <td>500</td>\n", " <td>78e4a9f0-0674-11f0-8acf-b5f913312dcb</td>\n", " <td>uwcu</td>\n", " <td>il</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " bank_id amount loan_id bank_name state\n", "0 544 400 2b644550-0674-11f0-9e42-b531eb6d9b34 mybank2 wi\n", "1 544 350 5c852cd0-0674-11f0-8b0a-b3bc8dc2bdb9 mybank2 wi\n", "2 544 300 aebdb7c0-0673-11f0-8b0a-b3bc8dc2bdb9 mybank2 wi\n", "3 544 300 f8c80870-0673-11f0-8acf-b5f913312dcb mybank2 wi\n", "4 544 300 01976a29-7d80-435f-ba6b-e22abc9d10f3 mybank2 None\n", "5 999 500 78e4a9f0-0674-11f0-8acf-b5f913312dcb uwcu il" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(cass.execute(\"SELECT * FROM loans\"))" ] } ], "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.12" } }, "nbformat": 4, "nbformat_minor": 5 }