Last active
November 22, 2022 06:02
-
-
Save DerekChia/bbfd22d744f41ef6bdb5884d6ff62c8a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "72256447", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1" | |
] | |
}, | |
"execution_count": 1, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import clickhouse_connect\n", | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"\n", | |
"client = clickhouse_connect.get_client(host='localhost', username='default', password='')\n", | |
"client.command('select 1')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "060bf69a", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"<class 'pandas._libs.tslibs.timestamps.Timestamp'>\n" | |
] | |
} | |
], | |
"source": [ | |
"df_tmp = pd.DataFrame(np.array([\"2017-11-22 15:42:58.270000+00:00\"]), columns=[\"business_time\"])\n", | |
"df_tmp[\"business_time\"] = pd.to_datetime(df_tmp[\"business_time\"], utc=True)\n", | |
"\n", | |
"# pandas._libs.tslibs.timestamps.Timestamp\n", | |
"print(type(df_tmp[\"business_time\"][0]))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "5aff5f46", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"datetime64[ns, UTC]\n" | |
] | |
} | |
], | |
"source": [ | |
"# datetime64[ns, UTC]\n", | |
"print(df_tmp[\"business_time\"].dtypes)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "e4a4489d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"''" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"client.command(\"DROP TABLE IF EXISTS tmp\")\n", | |
"client.command(\"\"\"\n", | |
"CREATE TABLE tmp\n", | |
"(\n", | |
" business_time DateTime64(9, 'UTC') not null,\n", | |
" primary key (business_time)\n", | |
")\n", | |
" ENGINE = MergeTree();\n", | |
"\"\"\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "a1ed85b0", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "TypeError", | |
"evalue": "Cannot interpret 'datetime64[ns, UTC]' as a data type", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", | |
"Input \u001b[0;32mIn [5]\u001b[0m, in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m rowsWritten \u001b[38;5;241m=\u001b[39m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert_df\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtmp\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf_tmp\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[0;32m~/anaconda3/envs/py38/lib/python3.8/site-packages/clickhouse_connect/driver/client.py:345\u001b[0m, in \u001b[0;36mClient.insert_df\u001b[0;34m(self, table, df, database, settings, column_names, context)\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(column_names) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(df\u001b[38;5;241m.\u001b[39mcolumns):\n\u001b[1;32m 344\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ProgrammingError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDataFrame column count does not match insert_columns\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[0;32m--> 345\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcolumn_names\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdatabase\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msettings\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msettings\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcontext\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[0;32m~/anaconda3/envs/py38/lib/python3.8/site-packages/clickhouse_connect/driver/client.py:319\u001b[0m, in \u001b[0;36mClient.insert\u001b[0;34m(self, table, data, column_names, database, column_types, column_type_names, column_oriented, settings, context)\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m context\u001b[38;5;241m.\u001b[39mempty:\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ProgrammingError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAttempting to insert new data with non-empty insert context\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[0;32m--> 319\u001b[0m \u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m \u001b[38;5;241m=\u001b[39m data\n\u001b[1;32m 320\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata_insert(context)\n", | |
"File \u001b[0;32m~/anaconda3/envs/py38/lib/python3.8/site-packages/clickhouse_connect/driver/insert.py:69\u001b[0m, in \u001b[0;36mInsertContext.data\u001b[0;34m(self, data)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m pd \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data, pd\u001b[38;5;241m.\u001b[39mDataFrame):\n\u001b[0;32m---> 69\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_convert_pandas\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumn_oriented \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m np \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data, np\u001b[38;5;241m.\u001b[39mndarray):\n", | |
"File \u001b[0;32m~/anaconda3/envs/py38/lib/python3.8/site-packages/clickhouse_connect/driver/insert.py:118\u001b[0m, in \u001b[0;36mInsertContext._convert_pandas\u001b[0;34m(self, df)\u001b[0m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 117\u001b[0m df_col \u001b[38;5;241m=\u001b[39m df_col\u001b[38;5;241m.\u001b[39mastype(ch_type\u001b[38;5;241m.\u001b[39mbase_type, copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m--> 118\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdatetime\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m ch_type\u001b[38;5;241m.\u001b[39mnp_type() \u001b[38;5;129;01mand\u001b[39;00m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43missubdtype\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf_col\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatetime64\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 119\u001b[0m div \u001b[38;5;241m=\u001b[39m ch_type\u001b[38;5;241m.\u001b[39mnano_divisor\n\u001b[1;32m 120\u001b[0m data\u001b[38;5;241m.\u001b[39mappend([\u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m pd\u001b[38;5;241m.\u001b[39misnull(x) \u001b[38;5;28;01melse\u001b[39;00m x\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m div \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m df_col])\n", | |
"File \u001b[0;32m~/anaconda3/envs/py38/lib/python3.8/site-packages/numpy/core/numerictypes.py:416\u001b[0m, in \u001b[0;36missubdtype\u001b[0;34m(arg1, arg2)\u001b[0m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 359\u001b[0m \u001b[38;5;124;03mReturns True if first argument is a typecode lower/equal in type hierarchy.\u001b[39;00m\n\u001b[1;32m 360\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 413\u001b[0m \n\u001b[1;32m 414\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 415\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m issubclass_(arg1, generic):\n\u001b[0;32m--> 416\u001b[0m arg1 \u001b[38;5;241m=\u001b[39m \u001b[43mdtype\u001b[49m\u001b[43m(\u001b[49m\u001b[43marg1\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mtype\n\u001b[1;32m 417\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m issubclass_(arg2, generic):\n\u001b[1;32m 418\u001b[0m arg2 \u001b[38;5;241m=\u001b[39m dtype(arg2)\u001b[38;5;241m.\u001b[39mtype\n", | |
"\u001b[0;31mTypeError\u001b[0m: Cannot interpret 'datetime64[ns, UTC]' as a data type" | |
] | |
} | |
], | |
"source": [ | |
"rowsWritten = client.insert_df('tmp', df_tmp)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "d079e179", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "TypeError", | |
"evalue": "Cannot interpret 'datetime64[ns, UTC]' as a data type", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", | |
"Input \u001b[0;32mIn [6]\u001b[0m, in \u001b[0;36m<cell line: 2>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# TypeError: Cannot interpret 'datetime64[ns, UTC]' as a data type\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43missubdtype\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf_tmp\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mbusiness_time\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtypes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatetime64\u001b[49m\u001b[43m)\u001b[49m\n", | |
"File \u001b[0;32m~/anaconda3/envs/py38/lib/python3.8/site-packages/numpy/core/numerictypes.py:416\u001b[0m, in \u001b[0;36missubdtype\u001b[0;34m(arg1, arg2)\u001b[0m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 359\u001b[0m \u001b[38;5;124;03mReturns True if first argument is a typecode lower/equal in type hierarchy.\u001b[39;00m\n\u001b[1;32m 360\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 413\u001b[0m \n\u001b[1;32m 414\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 415\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m issubclass_(arg1, generic):\n\u001b[0;32m--> 416\u001b[0m arg1 \u001b[38;5;241m=\u001b[39m \u001b[43mdtype\u001b[49m\u001b[43m(\u001b[49m\u001b[43marg1\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mtype\n\u001b[1;32m 417\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m issubclass_(arg2, generic):\n\u001b[1;32m 418\u001b[0m arg2 \u001b[38;5;241m=\u001b[39m dtype(arg2)\u001b[38;5;241m.\u001b[39mtype\n", | |
"\u001b[0;31mTypeError\u001b[0m: Cannot interpret 'datetime64[ns, UTC]' as a data type" | |
] | |
} | |
], | |
"source": [ | |
"# TypeError: Cannot interpret 'datetime64[ns, UTC]' as a data type\n", | |
"np.issubdtype(df_tmp[\"business_time\"].dtypes, np.datetime64)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "fcb8e762", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "py38", | |
"language": "python", | |
"name": "py38" | |
}, | |
"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.8.13" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment