Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save DerekChia/bbfd22d744f41ef6bdb5884d6ff62c8a to your computer and use it in GitHub Desktop.
Save DerekChia/bbfd22d744f41ef6bdb5884d6ff62c8a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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