{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "9e17a3ba-49bd-40d6-82c7-919b75095fb2", "metadata": {}, "source": [ "# Getting started with Query Profiler" ] }, { "attachments": {}, "cell_type": "markdown", "id": "944e9df2-834d-4133-9933-a7ef9e6eeff2", "metadata": {}, "source": [ "This starter notebook will help you get up and running with the Query Profiler (QProf) tool in VerticaPyLab and demonstrate functionality through various examples and use cases. \n", "\n", "A comprehensive doc is available on the [VerticaPy website](https://www.vertica.com/python/documentation/1.0.x/html/api/verticapy.performance.vertica.qprof.QueryProfiler.html#verticapy.performance.vertica.qprof.QueryProfiler).\n", "\n", "This tool is a work in progress and the VerticaPy team is continuously adding new features." ] }, { "cell_type": "markdown", "id": "d678255f-d822-4de1-9eae-009b77c189fa", "metadata": {}, "source": [ "## VerticaPyLab" ] }, { "attachments": {}, "cell_type": "markdown", "id": "166e44cb-88c5-470c-998d-e5c446f6ffc5", "metadata": {}, "source": [ "The easiest way to use the QProf tool is through VerticaPyLab. For installation instructions, see the [VerticaPy getting started page](https://www.vertica.com/python/documentation/1.0.x/html/getting_started.html)." ] }, { "attachments": {}, "cell_type": "markdown", "id": "59b71487", "metadata": {}, "source": [ "Before using the QProf tool, confirm that you are connected to a Vertica database. If not, follow the [connection instructions](https://www.vertica.com/python/documentation/1.0.x/html/connection.html) in a Jupyter notebook or connect using the **Connect** option on the VerticaPyLab homepage. " ] }, { "cell_type": "markdown", "id": "101c7e68-fb94-4618-aec8-aeddd5a3017c", "metadata": {}, "source": [ "# QueryProfiler" ] }, { "attachments": {}, "cell_type": "markdown", "id": "492714be-3794-4d0c-9711-b351580e5c31", "metadata": {}, "source": [ "The QueryProfiler object is a python object that includes many built-in methods for analyzing queries and their performance. There are a few different ways to create a QProf object." ] }, { "attachments": {}, "cell_type": "markdown", "id": "0c72da01-1a91-430b-bb0c-b6be70ae5d47", "metadata": {}, "source": [ "## Create and save a QueryProfiler object" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e99eba09", "metadata": {}, "source": [ "First, import the verticapy package and load the datasets:" ] }, { "cell_type": "code", "execution_count": 1, "id": "58a267c5-3e77-4b3c-9ac2-6aeba74fecc3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Connected Successfully!\n" ] } ], "source": [ "import verticapy as vp\n", "from verticapy.datasets import load_titanic, load_amazon\n", "\n", "# load datasets\n", "titanic = load_titanic()\n", "amazon = load_amazon()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "7a71e7d1-a280-43f3-9555-adb58d98aa91", "metadata": {}, "source": [ "### Create QProf object from transaction id and statement id" ] }, { "attachments": {}, "cell_type": "markdown", "id": "2a57bee5", "metadata": {}, "source": [ "Before creating the QProf object, take a look at the data used by the query:" ] }, { "cell_type": "code", "execution_count": 2, "id": "0270184b-ca21-4dc5-91d2-be1eea48a07c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
📅
date
Date
Abc
state
Varchar(32)
123
number
Integer
11998-01-01ACRE0
21998-01-01ALAGOAS0
31998-01-01AMAPÁ0
41998-01-01AMAZONAS0
51998-01-01BAHIA0
61998-01-01CEARÁ0
71998-01-01DISTRITO FEDERAL0
81998-01-01ESPÍRITO SANTO0
91998-01-01GOIÁS0
101998-01-01MARANHÃO0
111998-01-01MATO GROSSO0
121998-01-01MATO GROSSO DO SUL0
131998-01-01MINAS GERAIS0
141998-01-01PARANÁ0
151998-01-01PARAÍBA0
161998-01-01PARÁ0
171998-01-01PERNAMBUCO0
181998-01-01PIAUÍ0
191998-01-01RIO DE JANEIRO0
201998-01-01RIO GRANDE DO NORTE0
211998-01-01RIO GRANDE DO SUL0
221998-01-01RONDÔNIA0
231998-01-01RORAIMA0
241998-01-01SANTA CATARINA0
251998-01-01SERGIPE0
261998-01-01SÃO PAULO0
271998-01-01TOCANTINS0
281998-02-01ACRE0
291998-02-01ALAGOAS0
301998-02-01AMAPÁ0
311998-02-01AMAZONAS0
321998-02-01BAHIA0
331998-02-01CEARÁ0
341998-02-01DISTRITO FEDERAL0
351998-02-01ESPÍRITO SANTO0
361998-02-01GOIÁS0
371998-02-01MARANHÃO0
381998-02-01MATO GROSSO0
391998-02-01MATO GROSSO DO SUL0
401998-02-01MINAS GERAIS0
411998-02-01PARANÁ0
421998-02-01PARAÍBA0
431998-02-01PARÁ0
441998-02-01PERNAMBUCO0
451998-02-01PIAUÍ0
461998-02-01RIO DE JANEIRO0
471998-02-01RIO GRANDE DO NORTE0
481998-02-01RIO GRANDE DO SUL0
491998-02-01RONDÔNIA0
501998-02-01RORAIMA0
511998-02-01SANTA CATARINA0
521998-02-01SERGIPE0
531998-02-01SÃO PAULO0
541998-02-01TOCANTINS0
551998-03-01ACRE0
561998-03-01ALAGOAS0
571998-03-01AMAPÁ0
581998-03-01AMAZONAS0
591998-03-01BAHIA0
601998-03-01CEARÁ0
611998-03-01DISTRITO FEDERAL0
621998-03-01ESPÍRITO SANTO0
631998-03-01GOIÁS0
641998-03-01MARANHÃO0
651998-03-01MATO GROSSO0
661998-03-01MATO GROSSO DO SUL0
671998-03-01MINAS GERAIS0
681998-03-01PARANÁ0
691998-03-01PARAÍBA0
701998-03-01PARÁ0
711998-03-01PERNAMBUCO0
721998-03-01PIAUÍ0
731998-03-01RIO DE JANEIRO0
741998-03-01RIO GRANDE DO NORTE0
751998-03-01RIO GRANDE DO SUL0
761998-03-01RONDÔNIA0
771998-03-01RORAIMA0
781998-03-01SANTA CATARINA0
791998-03-01SERGIPE0
801998-03-01SÃO PAULO0
811998-03-01TOCANTINS0
821998-04-01ACRE0
831998-04-01ALAGOAS0
841998-04-01AMAPÁ0
851998-04-01AMAZONAS0
861998-04-01BAHIA0
871998-04-01CEARÁ0
881998-04-01DISTRITO FEDERAL0
891998-04-01ESPÍRITO SANTO0
901998-04-01GOIÁS0
911998-04-01MARANHÃO0
921998-04-01MATO GROSSO0
931998-04-01MATO GROSSO DO SUL0
941998-04-01MINAS GERAIS0
951998-04-01PARANÁ0
961998-04-01PARAÍBA0
971998-04-01PARÁ0
981998-04-01PERNAMBUCO0
991998-04-01PIAUÍ0
1001998-04-01RIO DE JANEIRO0
Rows: 1-100 | Columns: 3
" ], "text/plain": [ "None date state number \n", "1 1998-01-01 ACRE 0 \n", "2 1998-01-01 ALAGOAS 0 \n", "3 1998-01-01 AMAPÁ 0 \n", "4 1998-01-01 AMAZONAS 0 \n", "5 1998-01-01 BAHIA 0 \n", "6 1998-01-01 CEARÁ 0 \n", "7 1998-01-01 DISTRITO FEDERAL 0 \n", "8 1998-01-01 ESPÍRITO SANTO 0 \n", "9 1998-01-01 GOIÁS 0 \n", "10 1998-01-01 MARANHÃO 0 \n", "11 1998-01-01 MATO GROSSO 0 \n", "12 1998-01-01 MATO GROSSO DO SUL 0 \n", "13 1998-01-01 MINAS GERAIS 0 \n", "14 1998-01-01 PARANÁ 0 \n", "15 1998-01-01 PARAÍBA 0 \n", "16 1998-01-01 PARÁ 0 \n", "17 1998-01-01 PERNAMBUCO 0 \n", "18 1998-01-01 PIAUÍ 0 \n", "19 1998-01-01 RIO DE JANEIRO 0 \n", "20 1998-01-01 RIO GRANDE DO NORTE 0 \n", "21 1998-01-01 RIO GRANDE DO SUL 0 \n", "22 1998-01-01 RONDÔNIA 0 \n", "23 1998-01-01 RORAIMA 0 \n", "24 1998-01-01 SANTA CATARINA 0 \n", "25 1998-01-01 SERGIPE 0 \n", "26 1998-01-01 SÃO PAULO 0 \n", "27 1998-01-01 TOCANTINS 0 \n", "28 1998-02-01 ACRE 0 \n", "29 1998-02-01 ALAGOAS 0 \n", "30 1998-02-01 AMAPÁ 0 \n", "31 1998-02-01 AMAZONAS 0 \n", "32 1998-02-01 BAHIA 0 \n", "33 1998-02-01 CEARÁ 0 \n", "34 1998-02-01 DISTRITO FEDERAL 0 \n", "35 1998-02-01 ESPÍRITO SANTO 0 \n", "36 1998-02-01 GOIÁS 0 \n", "37 1998-02-01 MARANHÃO 0 \n", "38 1998-02-01 MATO GROSSO 0 \n", "39 1998-02-01 MATO GROSSO DO SUL 0 \n", "40 1998-02-01 MINAS GERAIS 0 \n", "41 1998-02-01 PARANÁ 0 \n", "42 1998-02-01 PARAÍBA 0 \n", "43 1998-02-01 PARÁ 0 \n", "44 1998-02-01 PERNAMBUCO 0 \n", "45 1998-02-01 PIAUÍ 0 \n", "46 1998-02-01 RIO DE JANEIRO 0 \n", "47 1998-02-01 RIO GRANDE DO NORTE 0 \n", "48 1998-02-01 RIO GRANDE DO SUL 0 \n", "49 1998-02-01 RONDÔNIA 0 \n", "50 1998-02-01 RORAIMA 0 \n", "51 1998-02-01 SANTA CATARINA 0 \n", "52 1998-02-01 SERGIPE 0 \n", "53 1998-02-01 SÃO PAULO 0 \n", "54 1998-02-01 TOCANTINS 0 \n", "55 1998-03-01 ACRE 0 \n", "56 1998-03-01 ALAGOAS 0 \n", "57 1998-03-01 AMAPÁ 0 \n", "58 1998-03-01 AMAZONAS 0 \n", "59 1998-03-01 BAHIA 0 \n", "60 1998-03-01 CEARÁ 0 \n", "61 1998-03-01 DISTRITO FEDERAL 0 \n", "62 1998-03-01 ESPÍRITO SANTO 0 \n", "63 1998-03-01 GOIÁS 0 \n", "64 1998-03-01 MARANHÃO 0 \n", "65 1998-03-01 MATO GROSSO 0 \n", "66 1998-03-01 MATO GROSSO DO SUL 0 \n", "67 1998-03-01 MINAS GERAIS 0 \n", "68 1998-03-01 PARANÁ 0 \n", "69 1998-03-01 PARAÍBA 0 \n", "70 1998-03-01 PARÁ 0 \n", "71 1998-03-01 PERNAMBUCO 0 \n", "72 1998-03-01 PIAUÍ 0 \n", "73 1998-03-01 RIO DE JANEIRO 0 \n", "74 1998-03-01 RIO GRANDE DO NORTE 0 \n", "75 1998-03-01 RIO GRANDE DO SUL 0 \n", "76 1998-03-01 RONDÔNIA 0 \n", "77 1998-03-01 RORAIMA 0 \n", "78 1998-03-01 SANTA CATARINA 0 \n", "79 1998-03-01 SERGIPE 0 \n", "80 1998-03-01 SÃO PAULO 0 \n", "81 1998-03-01 TOCANTINS 0 \n", "82 1998-04-01 ACRE 0 \n", "83 1998-04-01 ALAGOAS 0 \n", "84 1998-04-01 AMAPÁ 0 \n", "85 1998-04-01 AMAZONAS 0 \n", "86 1998-04-01 BAHIA 0 \n", "87 1998-04-01 CEARÁ 0 \n", "88 1998-04-01 DISTRITO FEDERAL 0 \n", "89 1998-04-01 ESPÍRITO SANTO 0 \n", "90 1998-04-01 GOIÁS 0 \n", "91 1998-04-01 MARANHÃO 0 \n", "92 1998-04-01 MATO GROSSO 0 \n", "93 1998-04-01 MATO GROSSO DO SUL 0 \n", "94 1998-04-01 MINAS GERAIS 0 \n", "95 1998-04-01 PARANÁ 0 \n", "96 1998-04-01 PARAÍBA 0 \n", "97 1998-04-01 PARÁ 0 \n", "98 1998-04-01 PERNAMBUCO 0 \n", "99 1998-04-01 PIAUÍ 0 \n", "100 1998-04-01 RIO DE JANEIRO 0 \n", "Rows: 1-100 | Columns: 3" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(amazon)" ] }, { "cell_type": "code", "execution_count": 3, "id": "feeb4ed1-7dbe-4a3c-b593-6cb79fa39e60", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
123
pclass
Integer
123
survived
Integer
Abc
Varchar(164)
Abc
sex
Varchar(20)
123
age
Numeric(8)
123
sibsp
Integer
123
parch
Integer
Abc
ticket
Varchar(36)
123
fare
Numeric(12)
Abc
cabin
Varchar(30)
Abc
embarked
Varchar(20)
Abc
boat
Varchar(100)
123
body
Integer
Abc
home.dest
Varchar(100)
110female2.012113781151.55C22 C26S[null][null]Montreal, PQ / Chesterville, ON
210male30.012113781151.55C22 C26S[null]135Montreal, PQ / Chesterville, ON
310female25.012113781151.55C22 C26S[null][null]Montreal, PQ / Chesterville, ON
410male39.0001120500.0A36S[null][null]Belfast, NI
510male71.000PC 1760949.5042[null]C[null]22Montevideo, Uruguay
610male47.010PC 17757227.525C62 C64C[null]124New York, NY
710male[null]00PC 1731825.925[null]S[null][null]New York, NY
810male24.001PC 17558247.5208B58 B60C[null][null]Montreal, PQ
910male36.0001305075.2417C6CA[null]Winnipeg, MN
1010male25.0001390526.0[null]C[null]148San Francisco, CA
1110male45.00011378435.5TS[null][null]Trenton, NJ
1210male42.00011048926.55D22S[null][null]London / Winnipeg, MB
1310male41.00011305430.5A21S[null][null]Pomeroy, WA
1410male48.000PC 1759150.4958B10C[null]208Omaha, NE
1510male[null]0011237939.6[null]C[null][null]Philadelphia, PA
1610male45.00011305026.55B38S[null][null]Washington, DC
1710male[null]0011379831.0[null]S[null][null][null]
1810male33.0006955.0B51 B53 B55S[null][null]New York, NY
1910male28.00011305947.1[null]S[null][null]Montevideo, Uruguay
2010male17.00011305947.1[null]S[null][null]Montevideo, Uruguay
2110male49.0001992426.0[null]S[null][null]Ascot, Berkshire / Rochester, NY
2210male36.0101987778.85C46S[null]172Little Onn Hall, Staffs
2310male46.010W.E.P. 573461.175E31S[null][null]Amenia, ND
2410male[null]001120510.0[null]S[null][null]Liverpool, England / Belfast
2510male27.01013508136.7792C89C[null][null]Los Angeles, CA
2610male[null]0011046552.0A14S[null][null]Stoughton, MA
2710male47.000572725.5875E58S[null][null]Victoria, BC
2810male37.011PC 1775683.1583E52C[null][null]Lakewood, NJ
2910male[null]0011379126.55[null]S[null][null]Roachdale, IN
3010male70.011WE/P 573571.0B22S[null]269Milwaukee, WI
3110male39.010PC 1759971.2833C85C[null][null]New York, NY
3210male31.010F.C. 1275052.0B71S[null][null]Montreal, PQ
3310male50.010PC 17761106.425C86C[null]62Deephaven, MN / Cedar Rapids, IA
3410male39.000PC 1758029.7A18C[null]133Philadelphia, PA
3510female36.000PC 1753131.6792A29C[null][null]New York, NY
3610male[null]00PC 17483221.7792C95S[null][null][null]
3710male30.00011305127.75C111C[null][null]New York, NY
3810male19.03219950263.0C23 C25 C27S[null][null]Winnipeg, MB
3910male64.01419950263.0C23 C25 C27S[null][null]Winnipeg, MB
4010male[null]0011377826.55D34S[null][null]Westcliff-on-Sea, Essex
4110male[null]001120580.0B102S[null][null][null]
4210male37.01011380353.1C123S[null][null]Scituate, MA
4310male47.00011132038.5E63S[null]275St Anne's-on-Sea, Lancashire
4410male24.000PC 1759379.2B86C[null][null][null]
4510male71.000PC 1775434.6542A5C[null][null]New York, NY
4610male38.001PC 17582153.4625C91S[null]147Winnipeg, MB
4710male46.000PC 1759379.2B82 B84C[null][null]New York, NY
4810male[null]0011379642.4[null]S[null][null][null]
4910male45.0103697383.475C83S[null][null]New York, NY
5010male40.0001120590.0B94S[null]110[null]
5110male55.0111274993.5B69S[null]307Montreal, PQ
5210male42.00011303842.5B11S[null][null]London / Middlesex
5310male[null]001746351.8625E46S[null][null]Brighton, MA
5410male55.00068050.0C39S[null][null]London / Birmingham
5510male42.01011378952.0[null]S[null]38New York, NY
5610male[null]00PC 1760030.6958[null]C14[null]New York, NY
5710female50.000PC 1759528.7125C49C[null][null]Paris, France New York, NY
5810male46.00069426.0[null]S[null]80Bennington, VT
5910male50.00011304426.0E60S[null][null]London
6010male32.500113503211.5C132C[null]45[null]
6110male58.0001177129.7B37C[null]258Buffalo, NY
6210male41.0101746451.8625D21S[null][null]Southington / Noank, CT
6310male[null]0011302826.55C124S[null][null]Portland, OR
6410male[null]00PC 1761227.7208[null]C[null][null]Chicago, IL
6510male29.00011350130.0D6S[null]126Springfield, MA
6610male30.00011380145.5[null]S[null][null]London / New York, NY
6710male30.00011046926.0C106S[null][null]Brockton, MA
6810male19.01011377353.1D30S[null][null]New York, NY
6910male46.0001305075.2417C6C[null]292Vancouver, BC
7010male54.0001746351.8625E46S[null]175Dorchester, MA
7110male28.010PC 1760482.1708[null]C[null][null]New York, NY
7210male65.0001350926.55E38S[null]249East Bridgewater, MA
7310male44.0201992890.0C78Q[null]230Fond du Lac, WI
7410male55.00011378730.5C30S[null][null]Montreal, PQ
7510male47.00011379642.4[null]S[null][null]Washington, DC
7610male37.001PC 1759629.7C118C[null][null]Brooklyn, NY
7710male58.00235273113.275D48C[null]122Lexington, MA
7810male64.00069326.0[null]S[null]263Isle of Wight, England
7910male65.00111350961.9792B30C[null]234Providence, RI
8010male28.500PC 1756227.7208D43C[null]189?Havana, Cuba
8110male[null]001120520.0[null]S[null][null]Belfast
8210male45.50011304328.5C124S[null]166Surbiton Hill, Surrey
8310male23.0001274993.5B24S[null][null]Montreal, PQ
8410male29.01011377666.6C2S[null][null]Isleworth, England
8510male18.010PC 17758108.9C65C[null][null]Madrid, Spain
8610male47.00011046552.0C110S[null]207Worcester, MA
8710male38.000199720.0[null]S[null][null]Rotterdam, Netherlands
8810male22.000PC 17760135.6333[null]C[null]232[null]
8910male[null]00PC 17757227.525[null]C[null][null][null]
9010male31.000PC 1759050.4958A24S[null][null]Trenton, NJ
9110male[null]0011376750.0A32S[null][null]Seattle, WA
9210male36.0001304940.125A10C[null][null]Winnipeg, MB
9310male55.010PC 1760359.4[null]C[null][null]New York, NY
9410male33.00011379026.55[null]S[null]109London
9510male61.013PC 17608262.375B57 B59 B63 B66C[null][null]Haverford, PA / Cooperstown, NY
9610male50.0101350755.9E44S[null][null]Duluth, MN
9710male56.00011379226.55[null]S[null][null]New York, NY
9810male56.0001776430.6958A7C[null][null]St James, Long Island, NY
9910male24.0101369560.0C31S[null][null]Huntington, WV
10010male[null]0011305626.0A19S[null][null]Streatham, Surrey
Rows: 1-100 | Columns: 14
" ], "text/plain": [ "None pclass survived name \\\\\n", "1 1 0 Allison, Miss. Helen Loraine \\\\\n", "2 1 0 Allison, Mr. Hudson Joshua Creighton \\\\\n", "3 1 0 Allison, Mrs. Hudson J C (Bessie Wald... \\\\\n", "4 1 0 Andrews, Mr. Thomas Jr \\\\\n", "5 1 0 Artagaveytia, Mr. Ramon \\\\\n", "6 1 0 Astor, Col. John Jacob \\\\\n", "7 1 0 Baumann, Mr. John D \\\\\n", "8 1 0 Baxter, Mr. Quigg Edmond \\\\\n", "9 1 0 Beattie, Mr. Thomson \\\\\n", "10 1 0 Birnbaum, Mr. Jakob \\\\\n", "11 1 0 Blackwell, Mr. Stephen Weart \\\\\n", "12 1 0 Borebank, Mr. John James \\\\\n", "13 1 0 Brady, Mr. John Bertram \\\\\n", "14 1 0 Brandeis, Mr. Emil \\\\\n", "15 1 0 Brewe, Dr. Arthur Jackson \\\\\n", "16 1 0 Butt, Major. Archibald Willingham \\\\\n", "17 1 0 Cairns, Mr. Alexander \\\\\n", "18 1 0 Carlsson, Mr. Frans Olof \\\\\n", "19 1 0 Carrau, Mr. Francisco M \\\\\n", "20 1 0 Carrau, Mr. Jose Pedro \\\\\n", "21 1 0 Case, Mr. Howard Brown \\\\\n", "22 1 0 Cavendish, Mr. Tyrell William \\\\\n", "23 1 0 Chaffee, Mr. Herbert Fuller \\\\\n", "24 1 0 Chisholm, Mr. Roderick Robert Crispin \\\\\n", "25 1 0 Clark, Mr. Walter Miller \\\\\n", "26 1 0 Clifford, Mr. George Quincy \\\\\n", "27 1 0 Colley, Mr. Edward Pomeroy \\\\\n", "28 1 0 Compton, Mr. Alexander Taylor Jr \\\\\n", "29 1 0 Crafton, Mr. John Bertram \\\\\n", "30 1 0 Crosby, Capt. Edward Gifford \\\\\n", "31 1 0 Cumings, Mr. John Bradley \\\\\n", "32 1 0 Davidson, Mr. Thornton \\\\\n", "33 1 0 Douglas, Mr. Walter Donald \\\\\n", "34 1 0 Dulles, Mr. William Crothers \\\\\n", "35 1 0 Evans, Miss. Edith Corse \\\\\n", "36 1 0 Farthing, Mr. John \\\\\n", "37 1 0 Foreman, Mr. Benjamin Laventall \\\\\n", "38 1 0 Fortune, Mr. Charles Alexander \\\\\n", "39 1 0 Fortune, Mr. Mark \\\\\n", "40 1 0 Franklin, Mr. Thomas Parham \\\\\n", "41 1 0 Fry, Mr. Richard \\\\\n", "42 1 0 Futrelle, Mr. Jacques Heath \\\\\n", "43 1 0 Gee, Mr. Arthur H \\\\\n", "44 1 0 Giglio, Mr. Victor \\\\\n", "45 1 0 Goldschmidt, Mr. George B \\\\\n", "46 1 0 Graham, Mr. George Edward \\\\\n", "47 1 0 Guggenheim, Mr. Benjamin \\\\\n", "48 1 0 Harrington, Mr. Charles H \\\\\n", "49 1 0 Harris, Mr. Henry Birkhardt \\\\\n", "50 1 0 Harrison, Mr. William \\\\\n", "51 1 0 Hays, Mr. Charles Melville \\\\\n", "52 1 0 Head, Mr. Christopher \\\\\n", "53 1 0 Hilliard, Mr. Herbert Henry \\\\\n", "54 1 0 Hipkins, Mr. William Edward \\\\\n", "55 1 0 Holverson, Mr. Alexander Oskar \\\\\n", "56 1 0 Hoyt, Mr. William Fisher \\\\\n", "57 1 0 Isham, Miss. Ann Elizabeth \\\\\n", "58 1 0 Jones, Mr. Charles Cresson \\\\\n", "59 1 0 Julian, Mr. Henry Forbes \\\\\n", "60 1 0 Keeping, Mr. Edwin \\\\\n", "61 1 0 Kent, Mr. Edward Austin \\\\\n", "62 1 0 Kenyon, Mr. Frederick R \\\\\n", "63 1 0 Klaber, Mr. Herman \\\\\n", "64 1 0 Lewy, Mr. Ervin G \\\\\n", "65 1 0 Long, Mr. Milton Clyde \\\\\n", "66 1 0 Loring, Mr. Joseph Holland \\\\\n", "67 1 0 Maguire, Mr. John Edward \\\\\n", "68 1 0 Marvin, Mr. Daniel Warner \\\\\n", "69 1 0 McCaffry, Mr. Thomas Francis \\\\\n", "70 1 0 McCarthy, Mr. Timothy J \\\\\n", "71 1 0 Meyer, Mr. Edgar Joseph \\\\\n", "72 1 0 Millet, Mr. Francis Davis \\\\\n", "73 1 0 Minahan, Dr. William Edward \\\\\n", "74 1 0 Molson, Mr. Harry Markland \\\\\n", "75 1 0 Moore, Mr. Clarence Bloomfield \\\\\n", "76 1 0 Natsch, Mr. Charles H \\\\\n", "77 1 0 Newell, Mr. Arthur Webster \\\\\n", "78 1 0 Nicholson, Mr. Arthur Ernest \\\\\n", "79 1 0 Ostby, Mr. Engelhart Cornelius \\\\\n", "80 1 0 Ovies y Rodriguez, Mr. Servando \\\\\n", "81 1 0 Parr, Mr. William Henry Marsh \\\\\n", "82 1 0 Partner, Mr. Austen \\\\\n", "83 1 0 Payne, Mr. Vivian Ponsonby \\\\\n", "84 1 0 Pears, Mr. Thomas Clinton \\\\\n", "85 1 0 Penasco y Castellana, Mr. Victor de S... \\\\\n", "86 1 0 Porter, Mr. Walter Chamberlain \\\\\n", "87 1 0 Reuchlin, Jonkheer. John George \\\\\n", "88 1 0 Ringhini, Mr. Sante \\\\\n", "89 1 0 Robbins, Mr. Victor \\\\\n", "90 1 0 Roebling, Mr. Washington Augustus II \\\\\n", "91 1 0 Rood, Mr. Hugh Roscoe \\\\\n", "92 1 0 Ross, Mr. John Hugo \\\\\n", "93 1 0 Rothschild, Mr. Martin \\\\\n", "94 1 0 Rowe, Mr. Alfred G \\\\\n", "95 1 0 Ryerson, Mr. Arthur Larned \\\\\n", "96 1 0 Silvey, Mr. William Baird \\\\\n", "97 1 0 Smart, Mr. John Montgomery \\\\\n", "98 1 0 Smith, Mr. James Clinch \\\\\n", "99 1 0 Smith, Mr. Lucien Philip \\\\\n", "100 1 0 Smith, Mr. Richard William \\\\\n", "None sex age sibsp parch ticket \\\\\n", "1 female 2.0 1 2 113781 \\\\\n", "2 male 30.0 1 2 113781 \\\\\n", "3 female 25.0 1 2 113781 \\\\\n", "4 male 39.0 0 0 112050 \\\\\n", "5 male 71.0 0 0 PC 17609 \\\\\n", "6 male 47.0 1 0 PC 17757 \\\\\n", "7 male None 0 0 PC 17318 \\\\\n", "8 male 24.0 0 1 PC 17558 \\\\\n", "9 male 36.0 0 0 13050 \\\\\n", "10 male 25.0 0 0 13905 \\\\\n", "11 male 45.0 0 0 113784 \\\\\n", "12 male 42.0 0 0 110489 \\\\\n", "13 male 41.0 0 0 113054 \\\\\n", "14 male 48.0 0 0 PC 17591 \\\\\n", "15 male None 0 0 112379 \\\\\n", "16 male 45.0 0 0 113050 \\\\\n", "17 male None 0 0 113798 \\\\\n", "18 male 33.0 0 0 695 \\\\\n", "19 male 28.0 0 0 113059 \\\\\n", "20 male 17.0 0 0 113059 \\\\\n", "21 male 49.0 0 0 19924 \\\\\n", "22 male 36.0 1 0 19877 \\\\\n", "23 male 46.0 1 0 W.E.P. 5734 \\\\\n", "24 male None 0 0 112051 \\\\\n", "25 male 27.0 1 0 13508 \\\\\n", "26 male None 0 0 110465 \\\\\n", "27 male 47.0 0 0 5727 \\\\\n", "28 male 37.0 1 1 PC 17756 \\\\\n", "29 male None 0 0 113791 \\\\\n", "30 male 70.0 1 1 WE/P 5735 \\\\\n", "31 male 39.0 1 0 PC 17599 \\\\\n", "32 male 31.0 1 0 F.C. 12750 \\\\\n", "33 male 50.0 1 0 PC 17761 \\\\\n", "34 male 39.0 0 0 PC 17580 \\\\\n", "35 female 36.0 0 0 PC 17531 \\\\\n", "36 male None 0 0 PC 17483 \\\\\n", "37 male 30.0 0 0 113051 \\\\\n", "38 male 19.0 3 2 19950 \\\\\n", "39 male 64.0 1 4 19950 \\\\\n", "40 male None 0 0 113778 \\\\\n", "41 male None 0 0 112058 \\\\\n", "42 male 37.0 1 0 113803 \\\\\n", "43 male 47.0 0 0 111320 \\\\\n", "44 male 24.0 0 0 PC 17593 \\\\\n", "45 male 71.0 0 0 PC 17754 \\\\\n", "46 male 38.0 0 1 PC 17582 \\\\\n", "47 male 46.0 0 0 PC 17593 \\\\\n", "48 male None 0 0 113796 \\\\\n", "49 male 45.0 1 0 36973 \\\\\n", "50 male 40.0 0 0 112059 \\\\\n", "51 male 55.0 1 1 12749 \\\\\n", "52 male 42.0 0 0 113038 \\\\\n", "53 male None 0 0 17463 \\\\\n", "54 male 55.0 0 0 680 \\\\\n", "55 male 42.0 1 0 113789 \\\\\n", "56 male None 0 0 PC 17600 \\\\\n", "57 female 50.0 0 0 PC 17595 \\\\\n", "58 male 46.0 0 0 694 \\\\\n", "59 male 50.0 0 0 113044 \\\\\n", "60 male 32.5 0 0 113503 \\\\\n", "61 male 58.0 0 0 11771 \\\\\n", "62 male 41.0 1 0 17464 \\\\\n", "63 male None 0 0 113028 \\\\\n", "64 male None 0 0 PC 17612 \\\\\n", "65 male 29.0 0 0 113501 \\\\\n", "66 male 30.0 0 0 113801 \\\\\n", "67 male 30.0 0 0 110469 \\\\\n", "68 male 19.0 1 0 113773 \\\\\n", "69 male 46.0 0 0 13050 \\\\\n", "70 male 54.0 0 0 17463 \\\\\n", "71 male 28.0 1 0 PC 17604 \\\\\n", "72 male 65.0 0 0 13509 \\\\\n", "73 male 44.0 2 0 19928 \\\\\n", "74 male 55.0 0 0 113787 \\\\\n", "75 male 47.0 0 0 113796 \\\\\n", "76 male 37.0 0 1 PC 17596 \\\\\n", "77 male 58.0 0 2 35273 \\\\\n", "78 male 64.0 0 0 693 \\\\\n", "79 male 65.0 0 1 113509 \\\\\n", "80 male 28.5 0 0 PC 17562 \\\\\n", "81 male None 0 0 112052 \\\\\n", "82 male 45.5 0 0 113043 \\\\\n", "83 male 23.0 0 0 12749 \\\\\n", "84 male 29.0 1 0 113776 \\\\\n", "85 male 18.0 1 0 PC 17758 \\\\\n", "86 male 47.0 0 0 110465 \\\\\n", "87 male 38.0 0 0 19972 \\\\\n", "88 male 22.0 0 0 PC 17760 \\\\\n", "89 male None 0 0 PC 17757 \\\\\n", "90 male 31.0 0 0 PC 17590 \\\\\n", "91 male None 0 0 113767 \\\\\n", "92 male 36.0 0 0 13049 \\\\\n", "93 male 55.0 1 0 PC 17603 \\\\\n", "94 male 33.0 0 0 113790 \\\\\n", "95 male 61.0 1 3 PC 17608 \\\\\n", "96 male 50.0 1 0 13507 \\\\\n", "97 male 56.0 0 0 113792 \\\\\n", "98 male 56.0 0 0 17764 \\\\\n", "99 male 24.0 1 0 13695 \\\\\n", "100 male None 0 0 113056 \\\\\n", "None fare cabin embarked boat body \\\\\n", "1 151.55 C22 C26 S None None \\\\\n", "2 151.55 C22 C26 S None 135 \\\\\n", "3 151.55 C22 C26 S None None \\\\\n", "4 0.0 A36 S None None \\\\\n", "5 49.5042 None C None 22 \\\\\n", "6 227.525 C62 C64 C None 124 \\\\\n", "7 25.925 None S None None \\\\\n", "8 247.5208 B58 B60 C None None \\\\\n", "9 75.2417 C6 C A None \\\\\n", "10 26.0 None C None 148 \\\\\n", "11 35.5 T S None None \\\\\n", "12 26.55 D22 S None None \\\\\n", "13 30.5 A21 S None None \\\\\n", "14 50.4958 B10 C None 208 \\\\\n", "15 39.6 None C None None \\\\\n", "16 26.55 B38 S None None \\\\\n", "17 31.0 None S None None \\\\\n", "18 5.0 B51 B53 B55 S None None \\\\\n", "19 47.1 None S None None \\\\\n", "20 47.1 None S None None \\\\\n", "21 26.0 None S None None \\\\\n", "22 78.85 C46 S None 172 \\\\\n", "23 61.175 E31 S None None \\\\\n", "24 0.0 None S None None \\\\\n", "25 136.7792 C89 C None None \\\\\n", "26 52.0 A14 S None None \\\\\n", "27 25.5875 E58 S None None \\\\\n", "28 83.1583 E52 C None None \\\\\n", "29 26.55 None S None None \\\\\n", "30 71.0 B22 S None 269 \\\\\n", "31 71.2833 C85 C None None \\\\\n", "32 52.0 B71 S None None \\\\\n", "33 106.425 C86 C None 62 \\\\\n", "34 29.7 A18 C None 133 \\\\\n", "35 31.6792 A29 C None None \\\\\n", "36 221.7792 C95 S None None \\\\\n", "37 27.75 C111 C None None \\\\\n", "38 263.0 C23 C25 C27 S None None \\\\\n", "39 263.0 C23 C25 C27 S None None \\\\\n", "40 26.55 D34 S None None \\\\\n", "41 0.0 B102 S None None \\\\\n", "42 53.1 C123 S None None \\\\\n", "43 38.5 E63 S None 275 \\\\\n", "44 79.2 B86 C None None \\\\\n", "45 34.6542 A5 C None None \\\\\n", "46 153.4625 C91 S None 147 \\\\\n", "47 79.2 B82 B84 C None None \\\\\n", "48 42.4 None S None None \\\\\n", "49 83.475 C83 S None None \\\\\n", "50 0.0 B94 S None 110 \\\\\n", "51 93.5 B69 S None 307 \\\\\n", "52 42.5 B11 S None None \\\\\n", "53 51.8625 E46 S None None \\\\\n", "54 50.0 C39 S None None \\\\\n", "55 52.0 None S None 38 \\\\\n", "56 30.6958 None C 14 None \\\\\n", "57 28.7125 C49 C None None \\\\\n", "58 26.0 None S None 80 \\\\\n", "59 26.0 E60 S None None \\\\\n", "60 211.5 C132 C None 45 \\\\\n", "61 29.7 B37 C None 258 \\\\\n", "62 51.8625 D21 S None None \\\\\n", "63 26.55 C124 S None None \\\\\n", "64 27.7208 None C None None \\\\\n", "65 30.0 D6 S None 126 \\\\\n", "66 45.5 None S None None \\\\\n", "67 26.0 C106 S None None \\\\\n", "68 53.1 D30 S None None \\\\\n", "69 75.2417 C6 C None 292 \\\\\n", "70 51.8625 E46 S None 175 \\\\\n", "71 82.1708 None C None None \\\\\n", "72 26.55 E38 S None 249 \\\\\n", "73 90.0 C78 Q None 230 \\\\\n", "74 30.5 C30 S None None \\\\\n", "75 42.4 None S None None \\\\\n", "76 29.7 C118 C None None \\\\\n", "77 113.275 D48 C None 122 \\\\\n", "78 26.0 None S None 263 \\\\\n", "79 61.9792 B30 C None 234 \\\\\n", "80 27.7208 D43 C None 189 \\\\\n", "81 0.0 None S None None \\\\\n", "82 28.5 C124 S None 166 \\\\\n", "83 93.5 B24 S None None \\\\\n", "84 66.6 C2 S None None \\\\\n", "85 108.9 C65 C None None \\\\\n", "86 52.0 C110 S None 207 \\\\\n", "87 0.0 None S None None \\\\\n", "88 135.6333 None C None 232 \\\\\n", "89 227.525 None C None None \\\\\n", "90 50.4958 A24 S None None \\\\\n", "91 50.0 A32 S None None \\\\\n", "92 40.125 A10 C None None \\\\\n", "93 59.4 None C None None \\\\\n", "94 26.55 None S None 109 \\\\\n", "95 262.375 B57 B59 B63 B66 C None None \\\\\n", "96 55.9 E44 S None None \\\\\n", "97 26.55 None S None None \\\\\n", "98 30.6958 A7 C None None \\\\\n", "99 60.0 C31 S None None \\\\\n", "100 26.0 A19 S None None \\\\\n", "None home.dest \n", "1 Montreal, PQ / Chesterville, ON \n", "2 Montreal, PQ / Chesterville, ON \n", "3 Montreal, PQ / Chesterville, ON \n", "4 Belfast, NI \n", "5 Montevideo, Uruguay \n", "6 New York, NY \n", "7 New York, NY \n", "8 Montreal, PQ \n", "9 Winnipeg, MN \n", "10 San Francisco, CA \n", "11 Trenton, NJ \n", "12 London / Winnipeg, MB \n", "13 Pomeroy, WA \n", "14 Omaha, NE \n", "15 Philadelphia, PA \n", "16 Washington, DC \n", "17 None \n", "18 New York, NY \n", "19 Montevideo, Uruguay \n", "20 Montevideo, Uruguay \n", "21 Ascot, Berkshire / Rochester, NY \n", "22 Little Onn Hall, Staffs \n", "23 Amenia, ND \n", "24 Liverpool, England / Belfast \n", "25 Los Angeles, CA \n", "26 Stoughton, MA \n", "27 Victoria, BC \n", "28 Lakewood, NJ \n", "29 Roachdale, IN \n", "30 Milwaukee, WI \n", "31 New York, NY \n", "32 Montreal, PQ \n", "33 Deephaven, MN / Cedar Rapids, IA \n", "34 Philadelphia, PA \n", "35 New York, NY \n", "36 None \n", "37 New York, NY \n", "38 Winnipeg, MB \n", "39 Winnipeg, MB \n", "40 Westcliff-on-Sea, Essex \n", "41 None \n", "42 Scituate, MA \n", "43 St Anne's-on-Sea, Lancashire \n", "44 None \n", "45 New York, NY \n", "46 Winnipeg, MB \n", "47 New York, NY \n", "48 None \n", "49 New York, NY \n", "50 None \n", "51 Montreal, PQ \n", "52 London / Middlesex \n", "53 Brighton, MA \n", "54 London / Birmingham \n", "55 New York, NY \n", "56 New York, NY \n", "57 Paris, France New York, NY \n", "58 Bennington, VT \n", "59 London \n", "60 None \n", "61 Buffalo, NY \n", "62 Southington / Noank, CT \n", "63 Portland, OR \n", "64 Chicago, IL \n", "65 Springfield, MA \n", "66 London / New York, NY \n", "67 Brockton, MA \n", "68 New York, NY \n", "69 Vancouver, BC \n", "70 Dorchester, MA \n", "71 New York, NY \n", "72 East Bridgewater, MA \n", "73 Fond du Lac, WI \n", "74 Montreal, PQ \n", "75 Washington, DC \n", "76 Brooklyn, NY \n", "77 Lexington, MA \n", "78 Isle of Wight, England \n", "79 Providence, RI \n", "80 ?Havana, Cuba \n", "81 Belfast \n", "82 Surbiton Hill, Surrey \n", "83 Montreal, PQ \n", "84 Isleworth, England \n", "85 Madrid, Spain \n", "86 Worcester, MA \n", "87 Rotterdam, Netherlands \n", "88 None \n", "89 None \n", "90 Trenton, NJ \n", "91 Seattle, WA \n", "92 Winnipeg, MB \n", "93 New York, NY \n", "94 London \n", "95 Haverford, PA / Cooperstown, NY \n", "96 Duluth, MN \n", "97 New York, NY \n", "98 St James, Long Island, NY \n", "99 Huntington, WV \n", "100 Streatham, Surrey \n", "Rows: 1-100 | Columns: 14" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(titanic)" ] }, { "cell_type": "markdown", "id": "b6109681-812d-4ab5-8abb-b01058571b3f", "metadata": {}, "source": [ "We can now run some queries to create a QProf object. One way to do so is by using the queries statement id and transaction id.\n", "\n", "To allow for SQL execution in Jupyter cells, load the sql extension:" ] }, { "cell_type": "code", "execution_count": 4, "id": "30cf65a4-e2ad-4aa2-b3c6-59bb51d93fc1", "metadata": {}, "outputs": [], "source": [ "%load_ext verticapy.sql" ] }, { "attachments": {}, "cell_type": "markdown", "id": "1a95489b", "metadata": {}, "source": [ "Next, let us run the queries:" ] }, { "cell_type": "code", "execution_count": 5, "id": "1220ab92-95e0-4fea-ae43-0b92a3a8c468", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Execution: 0.013s
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
📅
date
Date
123
month
Integer
123
avg_number_test
Float(22)
12017-09-0194110.66666666667
22007-09-0193500.96296296296
32010-09-0193163.25925925926
42004-09-0193092.59259259259
52003-09-0192826.85185185185
62005-09-0192824.33333333333
72010-08-0182788.96296296296
82015-09-0192669.74074074074
92007-08-0182475.44444444444
102012-09-0192299.25925925926
112002-08-0182116.7037037037
122002-09-0192066.77777777778
132006-09-0192030.62962962963
142005-08-0181925.22222222222
152011-09-0191863.0
162015-10-01101851.07407407407
172005-10-01101847.25925925926
182017-08-0181832.77777777778
192004-08-0181826.85185185185
202002-10-01101767.48148148148
212012-08-0181713.85185185185
222016-09-0191631.85185185185
232003-08-0181619.85185185185
242003-10-01101603.51851851852
252014-09-0191598.7037037037
262014-08-0181593.22222222222
272017-10-01101582.22222222222
281998-09-0191554.37037037037
292004-10-01101493.74074074074
302001-09-0191475.33333333333
311999-08-0181462.44444444444
322015-08-0181461.22222222222
332008-09-0191460.92592592593
342008-10-01101454.22222222222
352016-08-0181419.14814814815
361999-09-0191367.14814814815
371998-08-0181316.62962962963
382014-10-01101308.14814814815
392012-10-01101267.14814814815
402007-10-01101196.74074074074
412001-08-0181181.0
422013-09-0191169.81481481481
432010-10-01101166.11111111111
442001-10-01101149.55555555556
452004-11-01111139.37037037037
462016-10-01101118.88888888889
472006-08-0181090.48148148148
482009-09-0191090.0
492002-11-01111043.66666666667
502015-11-01111019.59259259259
512000-10-01101012.44444444444
521999-10-01101000.44444444444
532009-10-0110896.37037037037
542004-07-017881.814814814815
552003-11-0111873.037037037037
561998-10-0110870.185185185185
572000-09-019862.62962962963
582017-07-017848.555555555556
592011-08-018832.481481481482
602000-08-018822.296296296296
612006-10-0110809.407407407407
622005-11-0111805.62962962963
632013-10-0110789.814814814815
642016-11-0111746.407407407407
652016-07-017708.925925925926
662009-11-0111700.703703703704
672011-10-0110692.148148148148
682015-12-0112688.740740740741
692014-11-0111666.259259259259
702013-08-018658.222222222222
712017-11-0111651.296296296296
722009-08-018650.333333333333
732004-12-0112649.037037037037
742010-07-017616.518518518518
752010-11-0111614.222222222222
762005-07-017580.111111111111
772001-11-0111579.222222222222
782003-12-0112568.222222222222
792008-08-018538.074074074074
802004-06-016528.222222222222
812002-07-017509.296296296296
822012-11-0111503.185185185185
832012-07-017500.259259259259
842007-11-0111485.0
852008-11-0111473.259259259259
862011-11-0111452.62962962963
872013-11-0111450.0
882013-12-0112444.666666666667
892002-12-0112442.37037037037
902003-07-017437.185185185185
912014-12-0112405.111111111111
922002-06-016401.444444444444
932014-07-017400.037037037037
942011-12-0112364.0
952006-11-0111361.259259259259
962009-12-0112351.62962962963
971999-11-0111328.148148148148
981999-07-017324.296296296296
992015-07-017324.148148148148
1002016-12-0112319.0
Columns: 3
" ], "text/plain": [ "None date month avg_number_test \n", "1 2017-09-01 9 4110.66666666667 \n", "2 2007-09-01 9 3500.96296296296 \n", "3 2010-09-01 9 3163.25925925926 \n", "4 2004-09-01 9 3092.59259259259 \n", "5 2003-09-01 9 2826.85185185185 \n", "6 2005-09-01 9 2824.33333333333 \n", "7 2010-08-01 8 2788.96296296296 \n", "8 2015-09-01 9 2669.74074074074 \n", "9 2007-08-01 8 2475.44444444444 \n", "10 2012-09-01 9 2299.25925925926 \n", "11 2002-08-01 8 2116.7037037037 \n", "12 2002-09-01 9 2066.77777777778 \n", "13 2006-09-01 9 2030.62962962963 \n", "14 2005-08-01 8 1925.22222222222 \n", "15 2011-09-01 9 1863.0 \n", "16 2015-10-01 10 1851.07407407407 \n", "17 2005-10-01 10 1847.25925925926 \n", "18 2017-08-01 8 1832.77777777778 \n", "19 2004-08-01 8 1826.85185185185 \n", "20 2002-10-01 10 1767.48148148148 \n", "21 2012-08-01 8 1713.85185185185 \n", "22 2016-09-01 9 1631.85185185185 \n", "23 2003-08-01 8 1619.85185185185 \n", "24 2003-10-01 10 1603.51851851852 \n", "25 2014-09-01 9 1598.7037037037 \n", "26 2014-08-01 8 1593.22222222222 \n", "27 2017-10-01 10 1582.22222222222 \n", "28 1998-09-01 9 1554.37037037037 \n", "29 2004-10-01 10 1493.74074074074 \n", "30 2001-09-01 9 1475.33333333333 \n", "31 1999-08-01 8 1462.44444444444 \n", "32 2015-08-01 8 1461.22222222222 \n", "33 2008-09-01 9 1460.92592592593 \n", "34 2008-10-01 10 1454.22222222222 \n", "35 2016-08-01 8 1419.14814814815 \n", "36 1999-09-01 9 1367.14814814815 \n", "37 1998-08-01 8 1316.62962962963 \n", "38 2014-10-01 10 1308.14814814815 \n", "39 2012-10-01 10 1267.14814814815 \n", "40 2007-10-01 10 1196.74074074074 \n", "41 2001-08-01 8 1181.0 \n", "42 2013-09-01 9 1169.81481481481 \n", "43 2010-10-01 10 1166.11111111111 \n", "44 2001-10-01 10 1149.55555555556 \n", "45 2004-11-01 11 1139.37037037037 \n", "46 2016-10-01 10 1118.88888888889 \n", "47 2006-08-01 8 1090.48148148148 \n", "48 2009-09-01 9 1090.0 \n", "49 2002-11-01 11 1043.66666666667 \n", "50 2015-11-01 11 1019.59259259259 \n", "51 2000-10-01 10 1012.44444444444 \n", "52 1999-10-01 10 1000.44444444444 \n", "53 2009-10-01 10 896.37037037037 \n", "54 2004-07-01 7 881.814814814815 \n", "55 2003-11-01 11 873.037037037037 \n", "56 1998-10-01 10 870.185185185185 \n", "57 2000-09-01 9 862.62962962963 \n", "58 2017-07-01 7 848.555555555556 \n", "59 2011-08-01 8 832.481481481482 \n", "60 2000-08-01 8 822.296296296296 \n", "61 2006-10-01 10 809.407407407407 \n", "62 2005-11-01 11 805.62962962963 \n", "63 2013-10-01 10 789.814814814815 \n", "64 2016-11-01 11 746.407407407407 \n", "65 2016-07-01 7 708.925925925926 \n", "66 2009-11-01 11 700.703703703704 \n", "67 2011-10-01 10 692.148148148148 \n", "68 2015-12-01 12 688.740740740741 \n", "69 2014-11-01 11 666.259259259259 \n", "70 2013-08-01 8 658.222222222222 \n", "71 2017-11-01 11 651.296296296296 \n", "72 2009-08-01 8 650.333333333333 \n", "73 2004-12-01 12 649.037037037037 \n", "74 2010-07-01 7 616.518518518518 \n", "75 2010-11-01 11 614.222222222222 \n", "76 2005-07-01 7 580.111111111111 \n", "77 2001-11-01 11 579.222222222222 \n", "78 2003-12-01 12 568.222222222222 \n", "79 2008-08-01 8 538.074074074074 \n", "80 2004-06-01 6 528.222222222222 \n", "81 2002-07-01 7 509.296296296296 \n", "82 2012-11-01 11 503.185185185185 \n", "83 2012-07-01 7 500.259259259259 \n", "84 2007-11-01 11 485.0 \n", "85 2008-11-01 11 473.259259259259 \n", "86 2011-11-01 11 452.62962962963 \n", "87 2013-11-01 11 450.0 \n", "88 2013-12-01 12 444.666666666667 \n", "89 2002-12-01 12 442.37037037037 \n", "90 2003-07-01 7 437.185185185185 \n", "91 2014-12-01 12 405.111111111111 \n", "92 2002-06-01 6 401.444444444444 \n", "93 2014-07-01 7 400.037037037037 \n", "94 2011-12-01 12 364.0 \n", "95 2006-11-01 11 361.259259259259 \n", "96 2009-12-01 12 351.62962962963 \n", "97 1999-11-01 11 328.148148148148 \n", "98 1999-07-01 7 324.296296296296 \n", "99 2015-07-01 7 324.148148148148 \n", "100 2016-12-01 12 319.0 \n", "Columns: 3" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%sql\n", "SELECT date, MONTH(date) as month, AVG(number) as avg_number_test from public.amazon group by date order by avg_number_test desc;" ] }, { "cell_type": "code", "execution_count": 6, "id": "d59bf22e-ef6f-41c7-a798-f9c7070ae1e3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Execution: 0.022s
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
📅
date
Date
123
month
Integer
123
avg_number_test
Float(22)
123
max_number
Integer
12017-09-0194110.6666666666725004
22007-09-0193500.9629629629625963
32010-09-0193163.2592592592618366
42004-09-0193092.5925925925924994
52003-09-0192826.8518518518515790
62005-09-0192824.3333333333320551
72010-08-0182788.9629629629618130
82015-09-0192669.7407407407411068
92007-08-0182475.4444444444414453
102012-09-0192299.2592592592610344
112002-08-0182116.703703703715664
122002-09-0192066.7777777777811034
132006-09-0192030.6296296296312661
142005-08-0181925.2222222222213055
152011-09-0191863.07086
162015-10-01101851.074074074077781
172005-10-01101847.259259259268405
182017-08-0181832.7777777777811962
192004-08-0181826.8518518518513603
202002-10-01101767.481481481489375
212012-08-0181713.8518518518510395
222016-09-0191631.851851851858980
232003-08-0181619.8518518518511132
242003-10-01101603.518518518526085
252014-09-0191598.70370370377081
262014-08-0181593.222222222228555
272017-10-01101582.222222222227628
281998-09-0191554.3703703703710363
292004-10-01101493.740740740749295
302001-09-0191475.333333333338490
311999-08-0181462.4444444444418566
322015-08-0181461.222222222227913
332008-09-0191460.925925925937965
342008-10-01101454.222222222227691
352016-08-0181419.148148148156228
361999-09-0191367.1481481481511729
371998-08-0181316.6296296296315406
382014-10-01101308.148148148156448
392012-10-01101267.148148148155000
402007-10-01101196.740740740744981
412001-08-0181181.09043
422013-09-0191169.814814814815576
432010-10-01101166.111111111115264
442001-10-01101149.555555555566661
452004-11-01111139.370370370379842
462016-10-01101118.888888888895351
472006-08-0181090.481481481487575
482009-09-0191090.06051
492002-11-01111043.666666666677996
502015-11-01111019.592592592599643
512000-10-01101012.444444444446062
521999-10-01101000.444444444446109
532009-10-0110896.370370370376342
542004-07-017881.81481481481511517
552003-11-0111873.0370370370376195
561998-10-0110870.1851851851855137
572000-09-019862.629629629636251
582017-07-017848.5555555555564985
592011-08-018832.4814814814822742
602000-08-018822.2962962962966063
612006-10-0110809.4074074074075964
622005-11-0111805.629629629634968
632013-10-0110789.8148148148154921
642016-11-0111746.4074074074077879
652016-07-017708.9259259259263495
662009-11-0111700.70370370370410012
672011-10-0110692.1481481481483141
682015-12-0112688.7407407407416610
692014-11-0111666.2592592592597767
702013-08-018658.2222222222223568
712017-11-0111651.2962962962969079
722009-08-018650.3333333333333859
732004-12-0112649.0370370370375508
742010-07-017616.5185185185183442
752010-11-0111614.2222222222224417
762005-07-017580.1111111111114364
772001-11-0111579.2222222222224938
782003-12-0112568.2222222222224787
792008-08-018538.0740740740744435
802004-06-016528.2222222222229813
812002-07-017509.2962962962965661
822012-11-0111503.1851851851856156
832012-07-017500.2592592592593548
842007-11-0111485.02890
852008-11-0111473.2592592592593175
862011-11-0111452.629629629633043
872013-11-0111450.03688
882013-12-0112444.6666666666675514
892002-12-0112442.370370370373118
902003-07-017437.1851851851855435
912014-12-0112405.1111111111114828
922002-06-016401.4444444444447878
932014-07-017400.0370370370372255
942011-12-0112364.03218
952006-11-0111361.2592592592592883
962009-12-0112351.629629629632832
971999-11-0111328.1481481481482682
981999-07-017324.2962962962963926
992015-07-017324.1481481481481642
1002016-12-0112319.03300
Columns: 4
" ], "text/plain": [ "None date month avg_number_test max_number \n", "1 2017-09-01 9 4110.66666666667 25004 \n", "2 2007-09-01 9 3500.96296296296 25963 \n", "3 2010-09-01 9 3163.25925925926 18366 \n", "4 2004-09-01 9 3092.59259259259 24994 \n", "5 2003-09-01 9 2826.85185185185 15790 \n", "6 2005-09-01 9 2824.33333333333 20551 \n", "7 2010-08-01 8 2788.96296296296 18130 \n", "8 2015-09-01 9 2669.74074074074 11068 \n", "9 2007-08-01 8 2475.44444444444 14453 \n", "10 2012-09-01 9 2299.25925925926 10344 \n", "11 2002-08-01 8 2116.7037037037 15664 \n", "12 2002-09-01 9 2066.77777777778 11034 \n", "13 2006-09-01 9 2030.62962962963 12661 \n", "14 2005-08-01 8 1925.22222222222 13055 \n", "15 2011-09-01 9 1863.0 7086 \n", "16 2015-10-01 10 1851.07407407407 7781 \n", "17 2005-10-01 10 1847.25925925926 8405 \n", "18 2017-08-01 8 1832.77777777778 11962 \n", "19 2004-08-01 8 1826.85185185185 13603 \n", "20 2002-10-01 10 1767.48148148148 9375 \n", "21 2012-08-01 8 1713.85185185185 10395 \n", "22 2016-09-01 9 1631.85185185185 8980 \n", "23 2003-08-01 8 1619.85185185185 11132 \n", "24 2003-10-01 10 1603.51851851852 6085 \n", "25 2014-09-01 9 1598.7037037037 7081 \n", "26 2014-08-01 8 1593.22222222222 8555 \n", "27 2017-10-01 10 1582.22222222222 7628 \n", "28 1998-09-01 9 1554.37037037037 10363 \n", "29 2004-10-01 10 1493.74074074074 9295 \n", "30 2001-09-01 9 1475.33333333333 8490 \n", "31 1999-08-01 8 1462.44444444444 18566 \n", "32 2015-08-01 8 1461.22222222222 7913 \n", "33 2008-09-01 9 1460.92592592593 7965 \n", "34 2008-10-01 10 1454.22222222222 7691 \n", "35 2016-08-01 8 1419.14814814815 6228 \n", "36 1999-09-01 9 1367.14814814815 11729 \n", "37 1998-08-01 8 1316.62962962963 15406 \n", "38 2014-10-01 10 1308.14814814815 6448 \n", "39 2012-10-01 10 1267.14814814815 5000 \n", "40 2007-10-01 10 1196.74074074074 4981 \n", "41 2001-08-01 8 1181.0 9043 \n", "42 2013-09-01 9 1169.81481481481 5576 \n", "43 2010-10-01 10 1166.11111111111 5264 \n", "44 2001-10-01 10 1149.55555555556 6661 \n", "45 2004-11-01 11 1139.37037037037 9842 \n", "46 2016-10-01 10 1118.88888888889 5351 \n", "47 2006-08-01 8 1090.48148148148 7575 \n", "48 2009-09-01 9 1090.0 6051 \n", "49 2002-11-01 11 1043.66666666667 7996 \n", "50 2015-11-01 11 1019.59259259259 9643 \n", "51 2000-10-01 10 1012.44444444444 6062 \n", "52 1999-10-01 10 1000.44444444444 6109 \n", "53 2009-10-01 10 896.37037037037 6342 \n", "54 2004-07-01 7 881.814814814815 11517 \n", "55 2003-11-01 11 873.037037037037 6195 \n", "56 1998-10-01 10 870.185185185185 5137 \n", "57 2000-09-01 9 862.62962962963 6251 \n", "58 2017-07-01 7 848.555555555556 4985 \n", "59 2011-08-01 8 832.481481481482 2742 \n", "60 2000-08-01 8 822.296296296296 6063 \n", "61 2006-10-01 10 809.407407407407 5964 \n", "62 2005-11-01 11 805.62962962963 4968 \n", "63 2013-10-01 10 789.814814814815 4921 \n", "64 2016-11-01 11 746.407407407407 7879 \n", "65 2016-07-01 7 708.925925925926 3495 \n", "66 2009-11-01 11 700.703703703704 10012 \n", "67 2011-10-01 10 692.148148148148 3141 \n", "68 2015-12-01 12 688.740740740741 6610 \n", "69 2014-11-01 11 666.259259259259 7767 \n", "70 2013-08-01 8 658.222222222222 3568 \n", "71 2017-11-01 11 651.296296296296 9079 \n", "72 2009-08-01 8 650.333333333333 3859 \n", "73 2004-12-01 12 649.037037037037 5508 \n", "74 2010-07-01 7 616.518518518518 3442 \n", "75 2010-11-01 11 614.222222222222 4417 \n", "76 2005-07-01 7 580.111111111111 4364 \n", "77 2001-11-01 11 579.222222222222 4938 \n", "78 2003-12-01 12 568.222222222222 4787 \n", "79 2008-08-01 8 538.074074074074 4435 \n", "80 2004-06-01 6 528.222222222222 9813 \n", "81 2002-07-01 7 509.296296296296 5661 \n", "82 2012-11-01 11 503.185185185185 6156 \n", "83 2012-07-01 7 500.259259259259 3548 \n", "84 2007-11-01 11 485.0 2890 \n", "85 2008-11-01 11 473.259259259259 3175 \n", "86 2011-11-01 11 452.62962962963 3043 \n", "87 2013-11-01 11 450.0 3688 \n", "88 2013-12-01 12 444.666666666667 5514 \n", "89 2002-12-01 12 442.37037037037 3118 \n", "90 2003-07-01 7 437.185185185185 5435 \n", "91 2014-12-01 12 405.111111111111 4828 \n", "92 2002-06-01 6 401.444444444444 7878 \n", "93 2014-07-01 7 400.037037037037 2255 \n", "94 2011-12-01 12 364.0 3218 \n", "95 2006-11-01 11 361.259259259259 2883 \n", "96 2009-12-01 12 351.62962962963 2832 \n", "97 1999-11-01 11 328.148148148148 2682 \n", "98 1999-07-01 7 324.296296296296 3926 \n", "99 2015-07-01 7 324.148148148148 1642 \n", "100 2016-12-01 12 319.0 3300 \n", "Columns: 4" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%sql\n", "SELECT \n", " a.date, \n", " MONTH(a.date) AS month, \n", " AVG(a.number) AS avg_number_test, \n", " b.max_number\n", "FROM \n", " public.amazon AS a\n", "JOIN (\n", " SELECT \n", " date, \n", " MAX(number) AS max_number\n", " FROM \n", " public.amazon\n", " GROUP BY \n", " date\n", ") AS b \n", "ON \n", " a.date = b.date\n", "GROUP BY \n", " a.date, b.max_number\n", "ORDER BY \n", " avg_number_test DESC;\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "3fc0f046", "metadata": {}, "source": [ "In order to create a QProf object from a query, we need the queries `statement_id` and `transaction_id`, both of which are found in the QUERY_REQUESTS system table:" ] }, { "cell_type": "code", "execution_count": 7, "id": "0dd9983a-6a70-4f67-9b6c-414653df0555", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Execution: 0.302s
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
123
transaction_id
Integer
123
statement_id
Integer
Abc
Varchar(64000)
14503599627378622315
24503599627378622316
34503599627378622317
44503599627378622320
54503599627378622321
64503599627378622322
74503599627378622325
84503599627378622326
94503599627378622327
104503599627378622335
114503599627378622336
124503599627378622337
134503599627378622340
144503599627378622341
154503599627378622342
164503599627378622343
174503599627378703615
184503599627378703616
194503599627378703617
204503599627378703620
214503599627378703621
224503599627378703622
234503599627378703625
244503599627378703626
254503599627378703627
26450359962737800756
27450359962737800757
28450359962737800758
294503599627378010813
304503599627378010814
314503599627378010815
324503599627378010823
334503599627378010824
344503599627378010825
354503599627378010828
364503599627378010829
374503599627378010830
384503599627378010831
394503599627378063413
404503599627378063414
414503599627378063415
424503599627378063418
434503599627378063419
444503599627378063420
454503599627378092774
464503599627378092775
474503599627378092776
484503599627378092779
494503599627378092780
504503599627378092781
514503599627378215715
524503599627378215716
534503599627378215717
544503599627378215720
554503599627378215721
564503599627378215722
574503599627378215725
584503599627378215726
594503599627378215727
604503599627378215735
614503599627378215736
624503599627378215737
634503599627378215740
644503599627378215741
654503599627378215742
664503599627378215743
674503599627378367420
684503599627378367421
694503599627378367422
704503599627378367425
714503599627378367426
724503599627378367427
734503599627378367428
744503599627378532515
754503599627378532516
764503599627378532517
774503599627378532520
784503599627378532521
794503599627378532522
804503599627378532525
814503599627378532526
824503599627378532527
834503599627378532530
844503599627378532531
854503599627378532532
864503599627378532535
874503599627378532536
884503599627378532537
894503599627378532545
904503599627378532546
914503599627378532547
924503599627378532550
934503599627378532551
944503599627378532552
954503599627378532553
Columns: 3
" ], "text/plain": [ "None transaction_id statement_id request \n", "1 45035996273786223 15 SELECT date, MONTH(date) as month, AV... \n", "2 45035996273786223 16 SELECT date, MONTH(date) as month, AV... \n", "3 45035996273786223 17 SELECT date, MONTH(date) as month, AV... \n", "4 45035996273786223 20 SELECT a.date, MONTH(a.date) AS month... \n", "5 45035996273786223 21 SELECT a.date, MONTH(a.date) AS month... \n", "6 45035996273786223 22 SELECT a.date, MONTH(a.date) AS month... \n", "7 45035996273786223 25 SELECT transaction_id, statement_id, ... \n", "8 45035996273786223 26 SELECT transaction_id, statement_id, ... \n", "9 45035996273786223 27 SELECT transaction_id, statement_id, ... \n", "10 45035996273786223 35 SELECT /*+LABEL('verticapy_json')*/ '... \n", "11 45035996273786223 36 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "12 45035996273786223 37 SELECT /*+LABEL('vDataframe.shape')*/... \n", "13 45035996273786223 40 SELECT /*+LABEL('verticapy_json')*/ '... \n", "14 45035996273786223 41 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "15 45035996273786223 42 SELECT \"index\" A... \n", "16 45035996273786223 43 SELECT \"index\" A... \n", "17 45035996273787036 15 SELECT date, MONTH(date) as month, AV... \n", "18 45035996273787036 16 SELECT date, MONTH(date) as month, AV... \n", "19 45035996273787036 17 SELECT date, MONTH(date) as month, AV... \n", "20 45035996273787036 20 SELECT a.date, MONTH(a.date) AS month... \n", "21 45035996273787036 21 SELECT a.date, MONTH(a.date) AS month... \n", "22 45035996273787036 22 SELECT a.date, MONTH(a.date) AS month... \n", "23 45035996273787036 25 SELECT transaction_id, statement_id, ... \n", "24 45035996273787036 26 SELECT transaction_id, statement_id, ... \n", "25 45035996273780075 6 SELECT date, MONTH(date) as month, AV... \n", "26 45035996273780075 7 SELECT date, MONTH(date) as month, AV... \n", "27 45035996273780075 8 SELECT date, MONTH(date) as month, AV... \n", "28 45035996273780108 13 SELECT transaction_id, statement_id, ... \n", "29 45035996273780108 14 SELECT transaction_id, statement_id, ... \n", "30 45035996273780108 15 SELECT transaction_id, statement_id, ... \n", "31 45035996273780108 23 SELECT /*+LABEL('verticapy_json')*/ '... \n", "32 45035996273780108 24 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "33 45035996273780108 25 SELECT /*+LABEL('vDataframe.shape')*/... \n", "34 45035996273780108 28 SELECT /*+LABEL('verticapy_json')*/ '... \n", "35 45035996273780108 29 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "36 45035996273780108 30 SELECT \"index\" A... \n", "37 45035996273780108 31 SELECT \"index\" A... \n", "38 45035996273780634 13 SELECT date, MONTH(date) as month, AV... \n", "39 45035996273780634 14 SELECT date, MONTH(date) as month, AV... \n", "40 45035996273780634 15 SELECT date, MONTH(date) as month, AV... \n", "41 45035996273780634 18 SELECT transaction_id, statement_id, ... \n", "42 45035996273780634 19 SELECT transaction_id, statement_id, ... \n", "43 45035996273780634 20 SELECT transaction_id, statement_id, ... \n", "44 45035996273780927 74 SELECT a.date, MONTH(a.date) AS month... \n", "45 45035996273780927 75 SELECT a.date, MONTH(a.date) AS month... \n", "46 45035996273780927 76 SELECT a.date, MONTH(a.date) AS month... \n", "47 45035996273780927 79 SELECT transaction_id, statement_id, ... \n", "48 45035996273780927 80 SELECT transaction_id, statement_id, ... \n", "49 45035996273780927 81 SELECT transaction_id, statement_id, ... \n", "50 45035996273782157 15 SELECT date, MONTH(date) as month, AV... \n", "51 45035996273782157 16 SELECT date, MONTH(date) as month, AV... \n", "52 45035996273782157 17 SELECT date, MONTH(date) as month, AV... \n", "53 45035996273782157 20 SELECT a.date, MONTH(a.date) AS month... \n", "54 45035996273782157 21 SELECT a.date, MONTH(a.date) AS month... \n", "55 45035996273782157 22 SELECT a.date, MONTH(a.date) AS month... \n", "56 45035996273782157 25 SELECT transaction_id, statement_id, ... \n", "57 45035996273782157 26 SELECT transaction_id, statement_id, ... \n", "58 45035996273782157 27 SELECT transaction_id, statement_id, ... \n", "59 45035996273782157 35 SELECT /*+LABEL('verticapy_json')*/ '... \n", "60 45035996273782157 36 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "61 45035996273782157 37 SELECT /*+LABEL('vDataframe.shape')*/... \n", "62 45035996273782157 40 SELECT /*+LABEL('verticapy_json')*/ '... \n", "63 45035996273782157 41 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "64 45035996273782157 42 SELECT \"index\" A... \n", "65 45035996273782157 43 SELECT \"index\" A... \n", "66 45035996273783674 20 SELECT /*+LABEL('verticapy_json')*/ '... \n", "67 45035996273783674 21 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "68 45035996273783674 22 SELECT /*+LABEL('vDataframe.shape')*/... \n", "69 45035996273783674 25 SELECT /*+LABEL('verticapy_json')*/ '... \n", "70 45035996273783674 26 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "71 45035996273783674 27 SELECT \"index\" A... \n", "72 45035996273783674 28 SELECT \"index\" A... \n", "73 45035996273785325 15 SELECT date, MONTH(date) as month, AV... \n", "74 45035996273785325 16 SELECT date, MONTH(date) as month, AV... \n", "75 45035996273785325 17 SELECT date, MONTH(date) as month, AV... \n", "76 45035996273785325 20 SELECT a.date, MONTH(a.date) AS month... \n", "77 45035996273785325 21 SELECT a.date, MONTH(a.date) AS month... \n", "78 45035996273785325 22 SELECT a.date, MONTH(a.date) AS month... \n", "79 45035996273785325 25 SELECT date, MONTH(date) as month, AV... \n", "80 45035996273785325 26 SELECT date, MONTH(date) as month, AV... \n", "81 45035996273785325 27 SELECT date, MONTH(date) as month, AV... \n", "82 45035996273785325 30 SELECT a.date, MONTH(a.date) AS month... \n", "83 45035996273785325 31 SELECT a.date, MONTH(a.date) AS month... \n", "84 45035996273785325 32 SELECT a.date, MONTH(a.date) AS month... \n", "85 45035996273785325 35 SELECT transaction_id, statement_id, ... \n", "86 45035996273785325 36 SELECT transaction_id, statement_id, ... \n", "87 45035996273785325 37 SELECT transaction_id, statement_id, ... \n", "88 45035996273785325 45 SELECT /*+LABEL('verticapy_json')*/ '... \n", "89 45035996273785325 46 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "90 45035996273785325 47 SELECT /*+LABEL('vDataframe.shape')*/... \n", "91 45035996273785325 50 SELECT /*+LABEL('verticapy_json')*/ '... \n", "92 45035996273785325 51 (SELECT 0 AS \"index\", True AS \"is_cur... \n", "93 45035996273785325 52 SELECT \"index\" A... \n", "94 45035996273785325 53 SELECT \"index\" A... \n", "Columns: 3" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%sql\n", "SELECT transaction_id, statement_id, request\n", "FROM query_requests\n", "WHERE request LIKE '%avg_number_test%';" ] }, { "attachments": {}, "cell_type": "markdown", "id": "1d424353", "metadata": {}, "source": [ "Now that we have the necessary information, we can import the QueryProfiler tool and interface, and then create a QProf object. To create a QProf object, simply provide the transaction and statement ids in a tuple, which can contain a single or multiple statement and transaction id pairs:" ] }, { "cell_type": "code", "execution_count": 8, "id": "c475fd4e-2796-4979-aca1-6998e4ee37c6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Searching the performance tables...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "628ad528a2794fd293e5e6344d0b7e41", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/22 [00:00 v_monitor.execution_engine_profiles\n", "(45035996273780927, 76) -> v_monitor.query_plan_profiles\n", "(45035996273780927, 76) -> v_internal.dc_plan_activities\n", "(45035996273780927, 76) -> v_internal.dc_plan_resources\n", "This could potentially lead to incorrect computations or errors. Please review the various tables and investigate why this data was modified or is missing. It may have been wrongly imported, accidentally deleted or automatically removed, especially if you are directly working on the performance tables.\n", " warnings.warn(warning_message, Warning)\n" ] } ], "source": [ "from verticapy.performance.vertica import QueryProfiler, QueryProfilerInterface\n", "\n", "qprof = QueryProfiler((45035996273780927,76))" ] }, { "cell_type": "code", "execution_count": 9, "id": "dea74418-2c01-4bfd-9606-1948bbc5cc84", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Searching the performance tables...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6cd9ee36508f4376987216caa977c2be", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/22 [00:00 v_monitor.execution_engine_profiles\n", "(45035996273780927, 74) -> v_monitor.query_plan_profiles\n", "(45035996273780927, 74) -> v_internal.dc_plan_activities\n", "(45035996273780927, 74) -> v_internal.dc_plan_resources\n", "(45035996273780075, 6) -> v_internal.dc_explain_plans\n", "(45035996273780075, 6) -> v_monitor.execution_engine_profiles\n", "(45035996273780075, 6) -> v_monitor.query_plan_profiles\n", "(45035996273780075, 6) -> v_internal.dc_plan_activities\n", "(45035996273780075, 6) -> v_internal.dc_plan_resources\n", "This could potentially lead to incorrect computations or errors. Please review the various tables and investigate why this data was modified or is missing. It may have been wrongly imported, accidentally deleted or automatically removed, especially if you are directly working on the performance tables.\n", " warnings.warn(warning_message, Warning)\n" ] } ], "source": [ "# To create a QProf object w/ multiple queries, provide a list of tuples\n", "\n", "qprof = QueryProfilerInterface([(45035996273780927,74), (45035996273780075,6)])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e8ecc9fd", "metadata": {}, "source": [ "Once the QProf object is created, you can run the `get_queries()` method to view the queries contained in the QProf object:" ] }, { "cell_type": "code", "execution_count": 10, "id": "f0bb28bf-c927-43f5-8f7a-185022daa1ac", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
010
is_current
Boolean
123
transaction_id
Integer
123
statement_id
Integer
Abc
request_label
Varchar
Abc
Varchar(274)
123
qduration
Numeric(8)
📅
start_timestamp
Timestamp(29)
📅
end_timestamp
Timestamp(29)
0
45035996273780927740.0142422024-06-20 18:37:54.5107912024-06-20 18:37:54.525033
1
4503599627378007560.0126572024-06-20 18:16:43.3987622024-06-20 18:16:43.411419
Rows: 1-2 | Columns: 9
" ], "text/plain": [ "None is_current transaction_id statement_id request_label \\\\\n", "0 True 45035996273780927 74 \\\\\n", "1 False 45035996273780075 6 \\\\\n", "None request qduration start_timestamp \\\\\n", "0 SELECT a.date, MONTH(a.date) AS month... 0.014242 2024-06-20 18:37:54.510791 \\\\\n", "1 SELECT date, MONTH(date) as month, AV... 0.012657 2024-06-20 18:16:43.398762 \\\\\n", "None end_timestamp \n", "0 2024-06-20 18:37:54.525033 \n", "1 2024-06-20 18:16:43.411419 \n", "Rows: 1-2 | Columns: 9" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_queries()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "6b642e17", "metadata": {}, "source": [ "To visualize the query plan, run `get_qplan_tree()`, which is customizable, allowing you to specify certain metrics or focus on a specified tree path:" ] }, { "cell_type": "code", "execution_count": 11, "id": "4b2255ad-a535-43eb-b53b-d47b8da4c01b", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e9e3a8d4e4df4f6285e6cebdf29a7e01", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(Output(layout=Layout(border_bottom='1px solid gray', border_left='1px solid gray', border_right…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qprof.get_qplan_tree()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a5cf17a2-07ed-462c-a913-73e92c8d375a", "metadata": {}, "source": [ "### Create a QProf object directly from a query" ] }, { "attachments": {}, "cell_type": "markdown", "id": "38ea9293-ee17-44bf-8b50-30db89277bc2", "metadata": {}, "source": [ "You can also create the QProf Object directly from an SQL Command:" ] }, { "cell_type": "code", "execution_count": 12, "id": "8ec55d61-88d7-4919-8e76-87cfa360cce6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/site-packages/vertica_python/vertica/connection.py:693: UserWarning: NOTICE 4788: Statement is being profiled\n", "HINT: Select * from v_monitor.execution_engine_profiles where transaction_id=45035996273787036 and statement_id=53;\n", " warnings.warn(notice)\n", "/usr/local/lib/python3.10/site-packages/vertica_python/vertica/connection.py:693: UserWarning: NOTICE 3557: Initiator memory for query: [on pool sysquery: 80660 KB, minimum: 54891 KB]\n", " warnings.warn(notice)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Searching the performance tables...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/site-packages/vertica_python/vertica/connection.py:693: UserWarning: NOTICE 5077: Total memory required by query: [100117 KB]\n", " warnings.warn(notice)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0d3294933a5444ed93b8b83cd3a740e7", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/22 [00:00 v_monitor.query_events\n", "(45035996273787036, 53) -> v_monitor.projection_usage\n", "This could potentially lead to incorrect computations or errors. Please review the various tables and investigate why this data was modified or is missing. It may have been wrongly imported, accidentally deleted or automatically removed, especially if you are directly working on the performance tables.\n", " warnings.warn(warning_message, Warning)\n" ] } ], "source": [ "qprof = QueryProfiler(\"\"\"\n", " select transaction_id, statement_id, request, request_duration\n", " from query_requests where start_timestamp > (now() - interval'1 hour')\n", " order by request_duration desc limit 10; \n", " \"\"\"\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f0449a54-6909-4abc-9f9b-87de23cb9b94", "metadata": {}, "source": [ "### Save the QueryProfiler object in a target schema" ] }, { "attachments": {}, "cell_type": "markdown", "id": "14953c84", "metadata": {}, "source": [ "After you create a QProf object, you can save it to a target schema. In this example, we will save the object to the `sc_demo` schema:" ] }, { "cell_type": "code", "execution_count": 13, "id": "fba41c36-7e25-4867-abc2-b82e2ded4fad", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CREATE\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/site-packages/vertica_python/vertica/connection.py:693: UserWarning: NOTICE 4214: Object \"sc_demo\" already exists; nothing was done\n", " warnings.warn(notice)\n" ] }, { "data": { "text/html": [ "
Execution: 0.041s
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%sql\n", "CREATE SCHEMA IF NOT EXISTS sc_demo;" ] }, { "attachments": {}, "cell_type": "markdown", "id": "244404c6", "metadata": {}, "source": [ "To save the QProf object, specify the `target_schema` and, optionally, a `key_id` (it is a unique key which is used to search for the stored Qprof object) when creating the QProf object:" ] }, { "cell_type": "code", "execution_count": 14, "id": "60b5a107-ee6c-4b20-8eb1-4cfcaca7683d", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Searching the performance tables...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f0faca9017ab4226b6014e4cc8d404d6", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/22 [00:00 sc_demo.qprof_execution_engine_profiles_unique_xx1\n", "(45035996273780927, 76) -> sc_demo.qprof_query_plan_profiles_unique_xx1\n", "(45035996273780927, 76) -> sc_demo.qprof_dc_plan_activities_unique_xx1\n", "(45035996273780927, 76) -> sc_demo.qprof_dc_plan_resources_unique_xx1\n", "This could potentially lead to incorrect computations or errors. Please review the various tables and investigate why this data was modified or is missing. It may have been wrongly imported, accidentally deleted or automatically removed, especially if you are directly working on the performance tables.\n", " warnings.warn(warning_message, Warning)\n" ] } ], "source": [ "# Save it to your schema\n", "qprof = QueryProfiler(\n", " (45035996273780927, 76),\n", " target_schema='sc_demo',\n", " key_id = \"unique_xx1\",\n", " overwrite=True,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9fb705b4-1c82-4cf2-a2bc-43f43576e1db", "metadata": {}, "source": [ "## Load a QProf object" ] }, { "attachments": {}, "cell_type": "markdown", "id": "762b5dc0", "metadata": {}, "source": [ "To load a previously saved QProf, simply provide its `target_schema` and `key_id`:" ] }, { "cell_type": "code", "execution_count": 15, "id": "2512028f-d2bb-48c6-9f2b-b989aef10d1d", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Searching the performance tables...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d561c545c6404d0b8eb4acf0160e5456", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/22 [00:00Execution: 0.004s" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%sql\n", "CREATE SCHEMA IF NOT EXISTS sc_demo_1;" ] }, { "cell_type": "code", "execution_count": 27, "id": "1912c539-00b7-4907-afd4-aa4c6cd1de63", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files in the archive: dc_explain_plans.parquet\n", "dc_query_executions.parquet\n", "dc_requests_issued.parquet\n", "dc_slow_events.parquet\n", "execution_engine_profiles.parquet\n", "host_resources.parquet\n", "query_consumption.parquet\n", "query_plan_profiles.parquet\n", "query_profiles.parquet\n", "resource_pool_status.parquet\n", "profile_metadata.json\n", "Creating temporary directory: /tmp/profile_import_run_2024-06-21_16-55-03_904242\n", "Extracted files: [PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/dc_slow_events.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/dc_query_executions.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/query_profiles.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/query_plan_profiles.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/profile_metadata.json'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/dc_requests_issued.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/query_consumption.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/resource_pool_status.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/dc_explain_plans.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/execution_engine_profiles.parquet'), PosixPath('/tmp/profile_import_run_2024-06-21_16-55-03_904242/host_resources.parquet')]\n", "Searching the performance tables...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d9fa309230644700980053c026a0cd99", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/22 [00:00 sc_demo_1.qprof_execution_engine_profiles_unique_load_xx1\n", "(45035996273780927, 76) -> sc_demo_1.qprof_query_plan_profiles_unique_load_xx1\n", "(45035996273780927, 76) -> sc_demo_1.qprof_dc_plan_activities_unique_load_xx1\n", "(45035996273780927, 76) -> sc_demo_1.qprof_dc_plan_resources_unique_load_xx1\n", "This could potentially lead to incorrect computations or errors. Please review the various tables and investigate why this data was modified or is missing. It may have been wrongly imported, accidentally deleted or automatically removed, especially if you are directly working on the performance tables.\n", " warnings.warn(warning_message, Warning)\n" ] } ], "source": [ "from verticapy.performance.vertica import QueryProfiler, QueryProfilerInterface\n", "qprof = QueryProfiler.import_profile(\n", " target_schema=\"sc_demo_1\",\n", " key_id=\"unique_load_xx1\",\n", " filename=\"test_export_1.tar\",\n", " auto_initialize = True \n", " )" ] }, { "attachments": {}, "cell_type": "markdown", "id": "756d5858-03c6-4d9f-ba95-45e5743c5b16", "metadata": {}, "source": [ "## Methods & attributes" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a69ebd60-0ef4-4d81-8b0e-067a36a24b6a", "metadata": {}, "source": [ "The QProf object includes many useful methods and attributes to aid in the analysis of query performence." ] }, { "attachments": {}, "cell_type": "markdown", "id": "7d98cd1b-6ede-4367-8193-eaca253f9bbc", "metadata": {}, "source": [ "### Access performance tables" ] }, { "attachments": {}, "cell_type": "markdown", "id": "914d4332-8665-44c3-9ffe-88a5bbb6471c", "metadata": {}, "source": [ "With the QProf object, you can access any of the following tables:" ] }, { "cell_type": "code", "execution_count": 28, "id": "b6ec2a6d-dc86-44b6-82ba-9fc9a448f9b9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['dc_requests_issued',\n", " 'dc_query_executions',\n", " 'dc_explain_plans',\n", " 'execution_engine_profiles',\n", " 'query_events',\n", " 'query_plan_profiles',\n", " 'query_profiles',\n", " 'resource_pool_status',\n", " 'host_resources',\n", " 'dc_plan_activities',\n", " 'dc_lock_attempts',\n", " 'dc_plan_resources',\n", " 'dc_slow_events',\n", " 'configuration_parameters',\n", " 'projection_storage',\n", " 'projection_usage',\n", " 'query_consumption',\n", " 'resource_acquisitions',\n", " 'storage_containers',\n", " 'projections',\n", " 'projection_columns',\n", " 'resource_pools']" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_table()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "df515454", "metadata": {}, "source": [ "For example, view the QUERY_EVENTS table:" ] }, { "cell_type": "code", "execution_count": 29, "id": "546c11f6-ad78-4b50-b403-4f9ed3f78a79", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
📅
event_timestamp
Timestamptz(35)
Abc
node_name
Varchar(128)
123
user_id
Integer
Abc
user_name
Varchar(128)
Abc
session_id
Varchar(128)
123
request_id
Integer
123
transaction_id
Integer
123
statement_id
Integer
Abc
event_category
Varchar(12)
Abc
event_type
Varchar(64000)
Abc
Varchar(64000)
Abc
operator_name
Varchar(128)
123
path_id
Integer
123
object_id
Integer
Abc
Varchar(64000)
Abc
event_severity
Varchar(13)
Abc
Varchar(64000)
12024-06-20 18:37:54.547407+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776OPTIMIZATIONCSE ANALYSIS STATS[null][null]0Informational
22024-06-20 18:37:54.547367+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776OPTIMIZATIONCSE ANALYSIS STATS[null][null]0Informational
32024-06-20 18:37:54.546653+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776OPTIMIZATIONAUTO_PROJECTION_USED[null][null]45035996274074918Warning
42024-06-20 18:37:54.546584+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776OPTIMIZATIONNO GROUPBY PUSHDOWN[null][null]0Informational
52024-06-20 18:37:54.546347+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776OPTIMIZATIONNO HISTOGRAM[null][null]45035996274074920Critical
62024-06-20 18:37:54.549780+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776EXECUTIONRUNTIME_PREDICATE_EVAL_ORDERScan4[null]Informational
72024-06-20 18:37:54.549165+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776EXECUTIONEE_COMPILE_MEMORY_ALLOC[null][null][null]Informational
82024-06-20 18:37:54.548272+00:00v_demo_node000145035996273704962dbadminv_demo_node0001-144:0x5a81754503599627378092776EXECUTIONSMALL_MERGE_REPLACEDStorageMerge645035996274074918Informational
Rows: 1-8 | Columns: 17
" ], "text/plain": [ "None event_timestamp node_name user_id \\\\\n", "1 2024-06-20 18:37:54.547407+00:00 v_demo_node0001 45035996273704962 \\\\\n", "2 2024-06-20 18:37:54.547367+00:00 v_demo_node0001 45035996273704962 \\\\\n", "3 2024-06-20 18:37:54.546653+00:00 v_demo_node0001 45035996273704962 \\\\\n", "4 2024-06-20 18:37:54.546584+00:00 v_demo_node0001 45035996273704962 \\\\\n", "5 2024-06-20 18:37:54.546347+00:00 v_demo_node0001 45035996273704962 \\\\\n", "6 2024-06-20 18:37:54.549780+00:00 v_demo_node0001 45035996273704962 \\\\\n", "7 2024-06-20 18:37:54.549165+00:00 v_demo_node0001 45035996273704962 \\\\\n", "8 2024-06-20 18:37:54.548272+00:00 v_demo_node0001 45035996273704962 \\\\\n", "None user_name session_id request_id transaction_id \\\\\n", "1 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "2 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "3 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "4 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "5 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "6 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "7 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "8 dbadmin v_demo_node0001-144:0x5a8 175 45035996273780927 \\\\\n", "None statement_id event_category event_type \\\\\n", "1 76 OPTIMIZATION CSE ANALYSIS STATS \\\\\n", "2 76 OPTIMIZATION CSE ANALYSIS STATS \\\\\n", "3 76 OPTIMIZATION AUTO_PROJECTION_USED \\\\\n", "4 76 OPTIMIZATION NO GROUPBY PUSHDOWN \\\\\n", "5 76 OPTIMIZATION NO HISTOGRAM \\\\\n", "6 76 EXECUTION RUNTIME_PREDICATE_EVAL_ORDER \\\\\n", "7 76 EXECUTION EE_COMPILE_MEMORY_ALLOC \\\\\n", "8 76 EXECUTION SMALL_MERGE_REPLACED \\\\\n", "None event_description operator_name path_id \\\\\n", "1 Time spent on Common subexpressions a... None None \\\\\n", "2 Time spent on Common subexpressions a... None None \\\\\n", "3 The optimizer ran a query using auto-... None None \\\\\n", "4 The optimizer couldn't push GroupBy p... None None \\\\\n", "5 The optimizer encountered a predicate... None None \\\\\n", "6 RuntimePredicateOrdering used for det... Scan 4 \\\\\n", "7 Memory allocated during CompilePlan (... None None \\\\\n", "8 Small StorageMerge replaced with Stor... StorageMerge 6 \\\\\n", "None object_id event_details \\\\\n", "1 0 8 \\\\\n", "2 0 10 \\\\\n", "3 45035996274074918 amazon_super is an auto-projection \\\\\n", "4 0 Aggregate columns not materialized; c... \\\\\n", "5 45035996274074920 No histogram for public.amazon.date \\\\\n", "6 None Predicate evaluation order may get ch... \\\\\n", "7 None 203072 \\\\\n", "8 45035996274074918 Projection: public.amazon_super \\\\\n", "None event_severity suggested_action \n", "1 Informational Informational; No user action is nece... \n", "2 Informational Informational; No user action is nece... \n", "3 Warning Consider creating projections or run ... \n", "4 Informational Informational; No user action is nece... \n", "5 Critical analyze_statistics('public.amazon.dat... \n", "6 Informational \n", "7 Informational \n", "8 Informational \n", "Rows: 1-8 | Columns: 17" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_table('query_events')" ] }, { "attachments": {}, "cell_type": "markdown", "id": "3c57108a", "metadata": {}, "source": [ "Or the DC_EXPLAIN_PLANS table:" ] }, { "cell_type": "code", "execution_count": 30, "id": "9ae970f1-19ef-4990-be63-5a93fdd6f5d4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
📅
time
Timestamptz(35)
Abc
node_name
Varchar(128)
Abc
session_id
Varchar(128)
123
user_id
Integer
Abc
user_name
Varchar(128)
123
transaction_id
Integer
123
statement_id
Integer
123
request_id
Integer
123
path_id
Integer
123
path_line_index
Integer
Abc
Varchar(64000)
Abc
query_name
Varchar(128)
12024-06-20 18:37:54.546702+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617501[null]
22024-06-20 18:37:54.546713+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617502[null]
32024-06-20 18:37:54.546769+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617511[null]
42024-06-20 18:37:54.546779+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617512[null]
52024-06-20 18:37:54.546781+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617513[null]
62024-06-20 18:37:54.546806+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617521[null]
72024-06-20 18:37:54.546816+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617522[null]
82024-06-20 18:37:54.546818+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617523[null]
92024-06-20 18:37:54.546862+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617531[null]
102024-06-20 18:37:54.546873+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617532[null]
112024-06-20 18:37:54.546874+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617533[null]
122024-06-20 18:37:54.546891+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617541[null]
132024-06-20 18:37:54.546893+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617542[null]
142024-06-20 18:37:54.546893+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617543[null]
152024-06-20 18:37:54.546894+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617544[null]
162024-06-20 18:37:54.546894+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617545[null]
172024-06-20 18:37:54.546901+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617551[null]
182024-06-20 18:37:54.546921+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617561[null]
192024-06-20 18:37:54.546922+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617562[null]
202024-06-20 18:37:54.546922+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617563[null]
212024-06-20 18:37:54.546929+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617571[null]
222024-06-20 18:37:54.546930+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617572[null]
232024-06-20 18:37:54.546930+00:00v_demo_node0001v_demo_node0001-144:0x5a845035996273704962dbadmin450359962737809277617573[null]
Rows: 1-23 | Columns: 12
" ], "text/plain": [ "None time node_name session_id \\\\\n", "1 2024-06-20 18:37:54.546702+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "2 2024-06-20 18:37:54.546713+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "3 2024-06-20 18:37:54.546769+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "4 2024-06-20 18:37:54.546779+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "5 2024-06-20 18:37:54.546781+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "6 2024-06-20 18:37:54.546806+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "7 2024-06-20 18:37:54.546816+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "8 2024-06-20 18:37:54.546818+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "9 2024-06-20 18:37:54.546862+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "10 2024-06-20 18:37:54.546873+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "11 2024-06-20 18:37:54.546874+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "12 2024-06-20 18:37:54.546891+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "13 2024-06-20 18:37:54.546893+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "14 2024-06-20 18:37:54.546893+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "15 2024-06-20 18:37:54.546894+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "16 2024-06-20 18:37:54.546894+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "17 2024-06-20 18:37:54.546901+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "18 2024-06-20 18:37:54.546921+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "19 2024-06-20 18:37:54.546922+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "20 2024-06-20 18:37:54.546922+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "21 2024-06-20 18:37:54.546929+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "22 2024-06-20 18:37:54.546930+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "23 2024-06-20 18:37:54.546930+00:00 v_demo_node0001 v_demo_node0001-144:0x5a8 \\\\\n", "None user_id user_name transaction_id statement_id \\\\\n", "1 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "2 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "3 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "4 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "5 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "6 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "7 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "8 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "9 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "10 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "11 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "12 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "13 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "14 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "15 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "16 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "17 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "18 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "19 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "20 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "21 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "22 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "23 45035996273704962 dbadmin 45035996273780927 76 \\\\\n", "None request_id path_id path_line_index path_line \\\\\n", "1 175 0 1 +-SELECT LIMIT 100 [Cost: 3K, Rows: ... \\\\\n", "2 175 0 2 | Output Only: 100 tuples \\\\\n", "3 175 1 1 | +---> SORT [TOPK] [Cost: 3K, Rows: ... \\\\\n", "4 175 1 2 | | Order: ( / float8( GROUPBY HASH (LOCAL RESEGME... \\\\\n", "7 175 2 2 | | | Aggregates: sum_float(a.nu... \\\\\n", "8 175 2 3 | | | Group By: a.date, b.max_nu... \\\\\n", "9 175 3 1 | | | +---> JOIN MERGEJOIN(inputs pre... \\\\\n", "10 175 3 2 | | | | Join Cond: (a.date = b.d... \\\\\n", "11 175 3 3 | | | | Materialize at Output: a... \\\\\n", "12 175 4 1 | | | | +-- Outer -> STORAGE ACCESS f... \\\\\n", "13 175 4 2 | | | | | Projection: public.ama... \\\\\n", "14 175 4 3 | | | | | Materialize: a.date \\\\\n", "15 175 4 4 | | | | | Filter: (a.date IS NOT... \\\\\n", "16 175 4 5 | | | | | Runtime Filter: (SIP1(... \\\\\n", "17 175 5 1 | | | | +-- Inner -> SELECT [Cost: 1K... \\\\\n", "18 175 6 1 | | | | | +---> GROUPBY PIPELINED [Co... \\\\\n", "19 175 6 2 | | | | | | Aggregates: max(amaz... \\\\\n", "20 175 6 3 | | | | | | Group By: amazon.date \\\\\n", "21 175 7 1 | | | | | | +---> STORAGE ACCESS for ... \\\\\n", "22 175 7 2 | | | | | | | Projection: public... \\\\\n", "23 175 7 3 | | | | | | | Materialize: amazo... \\\\\n", "None query_name \n", "1 None \n", "2 None \n", "3 None \n", "4 None \n", "5 None \n", "6 None \n", "7 None \n", "8 None \n", "9 None \n", "10 None \n", "11 None \n", "12 None \n", "13 None \n", "14 None \n", "15 None \n", "16 None \n", "17 None \n", "18 None \n", "19 None \n", "20 None \n", "21 None \n", "22 None \n", "23 None \n", "Rows: 1-23 | Columns: 12" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_table('dc_explain_plans')" ] }, { "attachments": {}, "cell_type": "markdown", "id": "1639a49d", "metadata": {}, "source": [ "Or the QUERY_CONSUMPTION TABLE:" ] }, { "cell_type": "code", "execution_count": 31, "id": "5e7dc2a7-06ca-4e3e-a373-c35b405c63a5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
📅
start_time
Timestamptz(35)
📅
end_time
Timestamptz(35)
Abc
session_id
Varchar(128)
123
user_id
Integer
Abc
user_name
Varchar(128)
123
transaction_id
Integer
123
statement_id
Integer
123
cpu_cycles_us
Integer
123
network_bytes_received
Integer
123
network_bytes_sent
Integer
123
data_bytes_read
Integer
123
data_bytes_written
Integer
123
data_bytes_loaded
Integer
123
bytes_spilled
Integer
123
input_rows
Integer
123
input_rows_processed
Integer
123
peak_memory_kb
Integer
123
thread_count
Integer
123
duration_ms
Integer
Abc
resource_pool
Varchar(128)
123
output_rows
Integer
Abc
request_type
Varchar(128)
Abc
label
Varchar(128)
010
is_retry
Boolean
010
success
Boolean
Abc
query_name
Varchar(128)
12024-06-20 18:37:54.548795+00:002024-06-20 18:37:54.559212+00:00v_demo_node0001-144:0x5a845035996273704962dbadmin45035996273780927766588000000129081290818105091714general100QUERY[null]
[null]
Rows: 1-1 | Columns: 26
" ], "text/plain": [ "None start_time end_time \\\\\n", "1 2024-06-20 18:37:54.548795+00:00 2024-06-20 18:37:54.559212+00:00 \\\\\n", "None session_id user_id user_name \\\\\n", "1 v_demo_node0001-144:0x5a8 45035996273704962 dbadmin \\\\\n", "None transaction_id statement_id cpu_cycles_us network_bytes_received \\\\\n", "1 45035996273780927 76 6588 0 \\\\\n", "None network_bytes_sent data_bytes_read data_bytes_written \\\\\n", "1 0 0 0 \\\\\n", "None data_bytes_loaded bytes_spilled input_rows input_rows_processed \\\\\n", "1 0 0 12908 12908 \\\\\n", "None peak_memory_kb thread_count duration_ms resource_pool \\\\\n", "1 1810509 17 14 general \\\\\n", "None output_rows request_type label is_retry success \\\\\n", "1 100 QUERY None False True \\\\\n", "None query_name \n", "1 None \n", "Rows: 1-1 | Columns: 26" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_table('query_consumption')" ] }, { "cell_type": "markdown", "id": "06386101-33da-4b35-98d5-459c623c4723", "metadata": {}, "source": [ "### Get query information" ] }, { "attachments": {}, "cell_type": "markdown", "id": "57b9f1c6", "metadata": {}, "source": [ "You can retrieve the query information, such as transaction and statement id, from the QProf object:" ] }, { "cell_type": "code", "execution_count": 32, "id": "fc3c245a-5816-41cf-ad8c-407e07f62591", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/site-packages/vertica_python/vertica/connection.py:693: UserWarning: NOTICE 4788: Statement is being profiled\n", "HINT: Select * from v_monitor.execution_engine_profiles where transaction_id=45035996273788432 and statement_id=16;\n", " warnings.warn(notice)\n", "/usr/local/lib/python3.10/site-packages/vertica_python/vertica/connection.py:693: UserWarning: NOTICE 3557: Initiator memory for query: [on pool sysquery: 80660 KB, minimum: 54891 KB]\n", " warnings.warn(notice)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Searching the performance tables...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/site-packages/vertica_python/vertica/connection.py:693: UserWarning: NOTICE 5077: Total memory required by query: [100117 KB]\n", " warnings.warn(notice)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ce88f24d03514316a1b55b8fdcd21079", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/22 [00:00 v_monitor.query_events\n", "(45035996273788432, 16) -> v_monitor.projection_usage\n", "This could potentially lead to incorrect computations or errors. Please review the various tables and investigate why this data was modified or is missing. It may have been wrongly imported, accidentally deleted or automatically removed, especially if you are directly working on the performance tables.\n", " warnings.warn(warning_message, Warning)\n" ] } ], "source": [ "qprof = QueryProfiler(\n", " \"select transaction_id, statement_id, request, request_duration\"\n", " \" from query_requests where start_timestamp > (now() - interval'1 hour')\"\n", " \" order by request_duration desc limit 10;\"\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4e440ca4", "metadata": {}, "source": [ "View the statement and transaction ids:" ] }, { "cell_type": "code", "execution_count": 33, "id": "8b906270-df93-4fdc-98fa-832cac9ce3db", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "45035996273788432 16\n" ] } ], "source": [ "tid = qprof.transaction_id\n", "sid = qprof.statement_id\n", "print(tid, sid)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "6506aeb2", "metadata": {}, "source": [ "Display the query request:" ] }, { "cell_type": "code", "execution_count": 34, "id": "60a15fb6-b56d-4b4e-923e-8dad4d6fd717", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/markdown": [ "PROFILE
SELECT
    
transaction_id,
     statement_id,
     request,
     request_duration
FROM
query_requests
WHERE
start_timestamp > (now() - INTERVAL '1 hour' )
ORDER BY
request_duration DESC
LIMIT
10 " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "PROFILE \n", " SELECT\n", " transaction_id,\n", " statement_id,\n", " request,\n", " request_duration \n", " FROM\n", " query_requests \n", " WHERE start_timestamp > (now() - INTERVAL'1 hour') \n", " ORDER BY request_duration DESC \n", " LIMIT 10\n" ] }, { "data": { "text/plain": [ "\"PROFILE \\n SELECT\\n transaction_id,\\n statement_id,\\n request,\\n request_duration \\n FROM\\n query_requests \\n WHERE start_timestamp > (now() - INTERVAL'1 hour') \\n ORDER BY request_duration DESC \\n LIMIT 10\"" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Pretty, Formatted, Results\n", "qprof.get_request()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d7b05d0b", "metadata": {}, "source": [ "View the number of query steps in a bar graph:" ] }, { "cell_type": "code", "execution_count": 35, "id": "49215031-6b97-4eef-bcd5-beef682ae21d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/site-packages/verticapy/plotting/_utils.py:106: Warning: This plot is not yet available using the 'plotly' module.\n", "This plot will be drawn by using the 'highcharts' module.\n", "You can switch to any graphical library by using the 'set_option' function.\n", "The following example sets matplotlib as graphical library:\n", "import verticapy\n", "verticapy.set_option('plotting_lib', 'matplotlib')\n", " warnings.warn(warning_message, Warning)\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_qsteps(kind=\"bar\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "5a4ed4f0", "metadata": {}, "source": [ "You can also view the query plan:" ] }, { "cell_type": "code", "execution_count": 36, "id": "40abd1ba-62eb-4235-9e04-7d4e8298f9cf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "+-SELECT LIMIT 10 [Cost: 592K, Rows: 10 (NO STATISTICS)] (PATH ID: 0)\n", "| Output Only: 10 tuples\n", "| +---> SORT [TOPK] [Cost: 592K, Rows: 10K (NO STATISTICS)] (PATH ID: 1)\n", "| | Order: query_requests.request_duration DESC\n", "| | Output Only: 10 tuples\n", "| | +---> JOIN HASH [LeftOuter] [Cost: 9K, Rows: 10K (NO STATISTICS)] (PATH ID: 3)\n", "| | | Join Cond: (ri.node_name = dc_requests_completed.node_name) AND (ri.session_id = dc_requests_completed.session_id) AND (ri.request_id = dc_requests_completed.request_id)\n", "| | | Materialize at Output: ri.\"time\", ri.transaction_id, ri.statement_id, ri.request\n", "| | | +-- Outer -> STORAGE ACCESS for ri [Cost: 3K, Rows: 10K (NO STATISTICS)] (PATH ID: 4)\n", "| | | | Projection: v_internal.dc_requests_issued_p\n", "| | | | Materialize: ri.node_name, ri.session_id, ri.request_id\n", "| | | | Filter: (ri.\"time\" > '2024-06-21 15:55:06.213157+00'::timestamptz)\n", "| | | +-- Inner -> STORAGE ACCESS for dc_requests_completed [Cost: 4K, Rows: 10K (NO STATISTICS)] (PATH ID: 5)\n", "| | | | Projection: v_internal.dc_requests_completed_p\n", "| | | | Materialize: dc_requests_completed.request_id, dc_requests_completed.\"time\", dc_requests_completed.node_name, dc_requests_completed.session_id\n", "| | | | Filter: (dc_requests_completed.node_name IS NOT NULL)\n", "| | | | Filter: (dc_requests_completed.session_id IS NOT NULL)\n", "| | | | Filter: (dc_requests_completed.request_id IS NOT NULL)\n" ] }, { "data": { "text/plain": [ "'+-SELECT LIMIT 10 [Cost: 592K, Rows: 10 (NO STATISTICS)] (PATH ID: 0)\\n| Output Only: 10 tuples\\n| +---> SORT [TOPK] [Cost: 592K, Rows: 10K (NO STATISTICS)] (PATH ID: 1)\\n| | Order: query_requests.request_duration DESC\\n| | Output Only: 10 tuples\\n| | +---> JOIN HASH [LeftOuter] [Cost: 9K, Rows: 10K (NO STATISTICS)] (PATH ID: 3)\\n| | | Join Cond: (ri.node_name = dc_requests_completed.node_name) AND (ri.session_id = dc_requests_completed.session_id) AND (ri.request_id = dc_requests_completed.request_id)\\n| | | Materialize at Output: ri.\"time\", ri.transaction_id, ri.statement_id, ri.request\\n| | | +-- Outer -> STORAGE ACCESS for ri [Cost: 3K, Rows: 10K (NO STATISTICS)] (PATH ID: 4)\\n| | | | Projection: v_internal.dc_requests_issued_p\\n| | | | Materialize: ri.node_name, ri.session_id, ri.request_id\\n| | | | Filter: (ri.\"time\" > \\'2024-06-21 15:55:06.213157+00\\'::timestamptz)\\n| | | +-- Inner -> STORAGE ACCESS for dc_requests_completed [Cost: 4K, Rows: 10K (NO STATISTICS)] (PATH ID: 5)\\n| | | | Projection: v_internal.dc_requests_completed_p\\n| | | | Materialize: dc_requests_completed.request_id, dc_requests_completed.\"time\", dc_requests_completed.node_name, dc_requests_completed.session_id\\n| | | | Filter: (dc_requests_completed.node_name IS NOT NULL)\\n| | | | Filter: (dc_requests_completed.session_id IS NOT NULL)\\n| | | | Filter: (dc_requests_completed.request_id IS NOT NULL)'" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_qplan()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "635459dc", "metadata": {}, "source": [ "You can also open the query plan tree, which opens the image in a new tab that includes tool tips that provide more information for the various cells:" ] }, { "cell_type": "code", "execution_count": 37, "id": "1acfccfc-28e3-4d77-ae58-6f78d8dea2f1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "Tree\n", "\n", "\n", "\n", "legend_annotations\n", "\n", "\n", "\n", "\n", "Path transition\n", "\n", "\n", "O\n", "\n", "\n", "OUTER\n", "\n", "\n", "I\n", "\n", "\n", "INNER\n", "\n", "\n", "F\n", "\n", "\n", "FILTER\n", "\n", "\n", "H\n", "\n", "\n", "HASH\n", "\n", "\n", "\n", "legend0\n", "\n", "\n", "Execution time in ms\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "8\n", "\n", "\n", "27\n", "\n", "\n", "83\n", "\n", "\n", "\n", "legend1\n", "\n", "\n", "Produced row count\n", "\n", "\n", "20\n", "\n", "\n", "150\n", "\n", "\n", "1K\n", "\n", "\n", "8K\n", "\n", "\n", "56K\n", "\n", "\n", "\n", "0\n", "\n", "\n", "\n", ".\n", "\n", "\n", "0\n", "\n", "\n", "🔍\n", "\n", "\n", ".\n", "\n", "\n", "\n", "\n", "\n", "\n", "1\n", "\n", "\n", "\n", ".\n", "\n", "\n", "1\n", "\n", "\n", "🔀\n", "\n", "\n", ".\n", "\n", "\n", "\n", "\n", "\n", "\n", "0->1\n", "\n", "\n", "  \n", "\n", "\n", "\n", "3\n", "\n", "\n", "\n", ".\n", "\n", "\n", "3\n", "\n", "\n", "🔗\n", "\n", "\n", ".\n", "\n", "\n", "\n", "\n", "\n", "\n", "1->3\n", "\n", "\n", "  \n", "\n", "\n", "\n", "4\n", "\n", "\n", "\n", ".\n", "\n", "\n", "4\n", "\n", "\n", "🗄️\n", "\n", "\n", ".\n", "\n", "\n", "v_interna..\n", "\n", "\n", "\n", "\n", "\n", "\n", "3->4\n", "\n", "\n", " O \n", "\n", "\n", "\n", "5\n", "\n", "\n", "\n", ".\n", "\n", "\n", "5\n", "\n", "\n", "🗄️\n", "\n", "\n", ".\n", "\n", "\n", "v_interna..\n", "\n", "\n", "\n", "\n", "\n", "\n", "3->5\n", "\n", "\n", " I-H \n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_qplan_tree()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "90a66c0c", "metadata": {}, "source": [ "To view the query plan profile in a pie chart:" ] }, { "cell_type": "code", "execution_count": 38, "id": "84052ca2-ad0d-4a0b-9c2e-b8cbd732f7f1", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hole": 0, "hovertemplate": "%{label} ", "labels": [ "+-SELECT LIMIT 10 [Cost: 592K, Rows: 10 (NO STATISTICS)] (PATH ID: 0)", "| +---> SORT [TOPK] [Cost: 592K, Rows: 10K (NO STATISTICS)] (PATH ID: 1)", "| | +---> JOIN HASH [LeftOuter] [Cost: 9K, Rows: 10K (NO STATISTICS)] (PATH ID: ", "| | | +-- Inner -> STORAGE ACCESS for dc_requests_completed [Cost: 4K, Rows: 10K", "| | | +-- Outer -> STORAGE ACCESS for ri [Cost: 3K, Rows: 10K (NO STATISTICS)] (" ], "marker": { "colors": [ "#1A6AFF", "#000000", "#9C9C9C", "#FE5016", "#FDE159", "#33C180", "#4E2A84", "#00008B", "#800080", "#DA70D6", "#FFC0CB", "#F0FFFF", "#8B4513", "#F5FFFA", "#FFE4C4", "#B22222", "#A9A9A9", "#B0C4DE", "#778899", "#00FF00", "#FFF0F5", "#008000", "#87CEFA", "#2E8B57", "#483D8B", "#87CEEB", "#FF4500", "#FFE4E1", "#FFFF00", "#FFF5EE", "#6A5ACD", "#FFA07A", "#006400", "#F0F8FF", "#CD5C5C", "#6495ED", "#808080", "#FFA500", "#D2B48C", "#7FFF00", "#FFF8DC", "#FFFFFF", "#EE82EE", "#F0FFF0", "#D2691E", "#1E90FF", "#DC143C", "#4B0082", "#008B8B", "#FFDAB9", "#32CD32", "#FFDEAD", "#F0E68C", "#556B2F", "#8FBC8F", "#663399", "#ADD8E6", "#A52A2A", "#FFFFE0", "#FF1493", "#E6E6FA", "#E0FFFF", "#BDB76B", "#00BFFF", "#696969", "#0000CD", "#708090", "#F5F5F5", "#40E0D0", "#C0C0C0", "#F08080", "#8A2BE2", "#8B0000", "#98FB98", "#FA8072", "#FFE4B5", "#00FFFF", "#FAEBD7", "#FFFACD", "#D3D3D3", "#7FFFD4", "#2F4F4F", "#5F9EA0", "#3CB371", "#AFEEEE", "#FFB6C1", "#FDF5E6", "#008080", "#FF0000", "#B0E0E6", "#000080", "#FFFAF0", "#9400D3", "#800000", "#FF69B4", "#90EE90", "#FF00FF", "#F5DEB3", "#00FF7F", "#9370DB", "#7CFC00", "#4169E1", "#E9967A", "#F5F5DC", "#FFFAFA", "#D8BFD8", "#48D1CC", "#00CED1", "#191970", "#4682B4", "#9932CC", "#FFFFF0", "#DAA520", "#228B22", "#BC8F8F", "#808000", "#C71585", "#FF6347", "#FF8C00", "#EEE8AA", "#F4A460", "#CD853F", "#F8F8FF", "#9ACD32", "#8B008B", "#DB7093", "#20B2AA", "#ADFF2F", "#FFEBCD", "#7B68EE", "#B8860B", "#FAFAD2", "#FF7F50", "#DEB887", "#BA55D3", "#FFEFD5", "#66CDAA", "#FAF0E6", "#00FA9A", "#DCDCDC", "#6B8E23", "#DDA0DD", "#FFD700", "#0000FF", "#A0522D" ] }, "pull": [], "sort": false, "textinfo": "value", "type": "pie", "values": [ 0.000158, 0.140206, 0.2189, 0.050548, 0.140283 ] } ], "layout": { "autosize": true, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "#C8D4E3" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": { "angularaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" }, "bgcolor": "white", "radialaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "yaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "zaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "baxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "bgcolor": "white", "caxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 } } }, "title": { "text": "path_line", "x": 0.5, "xanchor": "center" } } }, "image/png": "iVBORw0KGgoAAAANSUhEUgAABVsAAAFoCAYAAABJ+CtsAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Qu4VVW5//F3buQOIqAIqJW3wkIPZipaKooeFOWYWBw5apqFiJYHNQg0j7cKgqOSmYAEXknCE4kmaomiliFlaqJSKmomiBcIQQUT9v//zu1YjjX2mJe11lx7r8t3PQ8PwppzzDE+c8yJ+7feNWbQ2NjYKLwQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEShIICFtL8mNnBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgFCBsZSIggAACCCCAAAIIIIAAAggggAACCCCAAAIZCBC2ZoBIEwgggAACCCCAAAIIIIAAAggggAACCCCAAGErcwABBBBAAAEEEEAAAQQQQAABBBBAAAEEEMhAgLA1A0SaQAABBBBAAAEEEEAAAQQQQAABBBBAAAEECFuZAwgggAACCCCAAAIIIIAAAggggAACCCCAQAYChK0ZINIEAggggAACCCCAAAIIIIAAAggggAACCCBA2MocQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEMhAgbM0AkSYQQAABBBBAAAEEEEAAAQQQQAABBBBAAAHCVuYAAggggAACCCCAAAIIIIAAAggggAACCCCQgQBhawaINIEAAggggAACCCCAAAIIIIAAAggggAACCBC2MgcQQAABBBBAAAEEEEAAAQQQQAABBBBAAIEMBAhbM0CkCQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgLCVOYAAAggggAACCCCAAAIIIIAAAggggAACCGQgQNiaASJNIIAAAggggAACCCCAAAIIIIAAAggggAAChK3MAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIAMBwtYMEGkCAQQQQAABBBBAAAEEEEAAAQQQQAABBBAgbGUOIIAAAggggAACCCCAAAIIIIAAAggggAACGQgQtmaASBMIIIAAAggggAACCCCAAAIIIIAAAggggABhK3MAAQQQQAABBBBAAAEEEEAAAQQQQAABBBDIQICwNQNEmkAAAQQQQAABBBBAAAEEEEAAAQQQQAABBAhbmQMIIIAAAggggAACCCCAAAIIIIAAAggggEAGAoStGSDSBAIIIIAAAggggAACCCCAAAIIIIAAAgggQNjKHEAAAQQQQAABBBBA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AAIIIIAAAggggAACCGQsQNiaMSjNIYAAAggggAACCCCAAAIIIIAAAggggEB9ChC21ud5Z9QIIIAAAggggAACCCCAAAIIIIAAAgggkLEAYWvGoDSHAAIIIIAAAggggAACCCCAAAIIIIAAAvUpQNhan+edUSOAAAIIIIAAAggggAACCCCAAAIIIIBAxgKErRmD0hwCCCCAAAIIIIAAAggggAACCCCAAAII1KcAYWt9nndGjQACCCCAAAIIIIAAAggggAACCCCAAAIZCxC2ZgxKcwgggAACCCCAAAIIIIAAAggggAACCCBQnwKErfV53hk1AggggAACCCCAAAIIIIAAAggggAACCGQsQNiaMSjNIYAAAggggAACCCCAAAIIIIAAAggggEB9ChC21ud5Z9QIIIAAAggggAACCCCAAAIIIIAAAgggkLEAYWvGoDSHAAIIIIAAAggggAACCCCAAAIIIIAAAvUpQNhan+edUSOAAAIIIIAAAggggAACCCCAAAIIIIBAxgKErRmD0hwCCCCAAAIIIIAAAggggAACCCCAAAII1KcAYWt9nndGjQACCCCAAAIIIIAAAggggAACCCCAAAIZCxC2ZgxKcwgggAACCCCAAAIIIIAAAggggAACCCBQnwKErfV53hk1AggggAACCCCAAAIIIIAAAggggAACCGQsQNiaMSjNIYAAAggggAACCCCAAAIIIIAAAggggEB9ChC21ud5Z9QIIIAAAggggAACCCCAAAIIIIAAAgggkLEAYWvGoDSHAAIIIIAAAggggAACCCCAAAIIIIAAAvUpQNhan+edUSOAAAIIIIAAAggggAACCCCAAAIIIIBAxgKErRmD0hwCCCCAAAIIIIAAAggggAACCCCAAAII1KcAYWt9nndGjQACCCCAAAIIIIAAAggggAACCCCAAAIZCxC2ZgxKcwgggAACCCCAAAIIIIAAAggggAACCCBQnwKErfV53hk1AggggAACCCCAAAIIIIAAAggggAACCGQsQNiaMSjNIYAAAggggAACCCCAAAIIIIAAAggggEB9ChC21ud5Z9QIIIAAAlUqsGDRw3LxlDlh748dPFAuG3eGdOzQLnI0cdu/v+kDuWTqHLl78dJw/yvGnyHDhx6aa+uPT66Q08dODv+89167yfTJ50n3bl3zjvXiK6tk6nXzZNKFo/Leu2rmfJl9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/mCi1HHZoZIdIPvOi/Zfz83rb6xN5e4ba1JInfYclGO7qA+J7JDdXNPmwwXfnNd5OnHSrNw15vZV25v4w1ky7uyTctewOQ/2XPBt5/bFvpajTNx9dDtz7Uy/6Y7chybu/mabTZs3hx8yfKJvr9x5d+8p9r66338M+WL4AYp7v3Hvj/q+jvnrJx2T+yDDNw4NPPUDPPMBj3vtu/2x3486prm/+JxNH/S86CvuAyB33rj3Kd85MtuYINd3jmwH3W6Xvr0KvlfbfTH96LFd12bWaeZROa65NG0StqZRYhsEEEAAgYIFBg4cKI899ljB++kOp556qvz0pz+Vrl2bqi5mz54t3/zmNxPbeuaZZ8KvpR555JHebS+//HL57ne/K4888khumyOOOEJuvvlm2WmnncJ9Fi9eHPmery/333+/DB48ONz3tddek6997WvywAMP5I5vjtmuXTv54IMP5Ec/+pH8z//8T+JYCglb77j/PZl+27thmwfs3U4uGrOtdGgfxB7jxb//S669daP8zzndpHu3Bu+219yyQf7y13/J1HHb5bb50/IP5KKr14fb79KnTeR7vr7oMSdcuV7e2dgY7j9mZGf58pGdwv9et36rjJv6T3l1ddOSE27biWDuBm16SND3xxIEbQrelR0QQKD8AoSt5TU2YdFXhw0KQ0Xz5969euTCMfOD/NmnHZ/7gdwNRO397KAqq7BV2586fV6I0aVTh2YVWm5gq8d9ddUbYX9bO2z1hYW+sNUXYOl2y55cEVthamZIqaGkPdOKDVujquiuv/UuGXzIfnnhedqZXcq43HNvB6l6fP2AIE0IHtXXqCA9bVib1qDU7exAyg2+3TG417YbtvquJ7d/vlDXtPPOxvdyIawbAppzPWLYoNy9JqlCNio09825uA859BsNdt/sMcXtZ3+Q45ur2j8NfDVsNVXicXPaPVZUVal6aji5x647hcGi/cGR75jq+Mhjf2n2oUdS2OoLat05EHXvUkPftRA1/mLv1e5+vvaT5lGp11gp+xO2lqLHvggggAACXoElS5bI4YcfXpSOCT9XrFgRhp4aVo4dO1amTZsWGVLagacdltodsENPexsNaPX1uc99Lhfyzp8/Pwx3NfSdMGGCfPvb3w4D1J/97Gfh35nAVP88YsQIOeecc+SWW24Ruy1tM03fo5DShq0afs6YtzEXempA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aoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYAWFrsf6qEyBAgAABAgQIECBAgAABAgQIECCQiICwNZFBaoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYAWFrsf6qEyBAgAABAgQIECBAgAABAgQIECCQiICwNZFBaoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYAWFrsf6qEyBAgAABAgQIECBAgAABAgQIECCQiICwNZFBaoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYAWFrsf6qEyBAgAABAgQIECBAgAABAgQIECCQiICwNZFBaoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYAWFrsf6qEyBAgAABAgQIECBAgAABAgQIECCQiICwNZFBaoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYAWFrsf6qEyBAgAABAgQIECBAgAABAgQIECCQiICwNZFBaoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYAWFrsf6qEyBAgAABAgQIECBAgAABAgQIECCQiICwNZFBaoMAAQIECBAgQIAAAQIECBAgQIAAgWIFhK3F+qtOgAABAgQIECBAgAABAgQIECBAgEAiAsLWRAapDQIECBAgQIAAAQIECBAgQIAAAQIEihUQthbrrzoBAgQIECBAgAABAgQIECBAgAABAokICFsTGaQ2CBAgQIAAAQIECBAgQIAAAQIECBAoVkDYWqy/6gQIECBAgAABAgQIECBAgAABAgQIJCIgbE1kkNogQIAAAQIECBAgQIAAAQIECBAgQKBYgf8Dwc11w2LNw/4AAAAASUVORK5CYII=", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qprof.get_qplan_profile(kind = \"pie\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "20757d86", "metadata": {}, "source": [ "To view the cpu time of the query in a bar graph:" ] }, { "cell_type": "code", "execution_count": 39, "id": "b6b42b3c-1233-47cc-a781-04209dc03aed", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "name": "v_demo_node0001", "type": "bar", "x": [ "3", "5", "2", "1", "4", "-1", "0" ], "y": [ 83813, 24969, 15714, 7216, 819, 196, 48 ] } ], "layout": { "height": 500, "hoverlabel": { "namelength": -1 }, "legend": { "title": { "text": "node_name" } }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "#C8D4E3" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": { "angularaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" }, "bgcolor": "white", "radialaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "yaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "zaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "baxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "bgcolor": "white", "caxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 } } }, "width": 344, "xaxis": { "autorange": true, "range": [ -0.5, 6.5 ], "title": { "text": "path_id" }, "type": "category" }, "yaxis": { "autorange": true, "range": [ 0, 88224.21052631579 ], "title": { "text": "sum(counter_value) as cet" }, "type": "linear" } } }, "image/png": "iVBORw0KGgoAAAANSUhEUgAABVsAAAH0CAYAAAAjXP1UAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3X+MVWd6J/i3im4aNGEwdq9/EDF4IDvCnnZCwtpdSacJaTLSNhZyRK9r6HYk99JiSiBN1DYqRNlCFmrZhUAYayKZrUVNvFJaJliNV3KbaNVxxkt+mB7HI886sr1aGbWntf61sR3HGdmhG2p1bnJvinJh7qXOufd5z/nUX23q3Pc87+d5qpr6cuq9Q9PT09PJBwECBAgQIECAAAECBAgQIECAAAECBAjMS2BI2DovPy8mQIAAAQIECBAgQIAAAQIECBAgQIBAS0DYahAIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYagYIECBAgAABAgQIECBAgAABAgQIECBQgoCwtQRESxAgQIAAAQIECBAgQIAAAQIECBAgQEDYGmAGfvTChXT6Ly4EqEQJkQV+40vD6bZfGY5cotoIECBAgAABAgQIECBAgAABAo0WELYGaP8zp8+nx78vbA3QitAl3PU/LUi/+WVha+gmKY4AAQIECBAgQIAAAQIECBBotICwNUD7ha0BmpBBCcLWDJqkRAIECBAgQIAAAQIECBAgQKDRAsLWAO0XtgZoQgYlCFszaJISCRAgQIAAAQIECBAgQIAAgUYLCFsDtF/YGqAJGZQgbM2gSUokQIAAAQIECBAgQIAAAQIEGi0gbA3QfmFrgCZkUIKwNYMmKZEAAQIECBAgQIAAAQIECBBotICwNUD7ha0BmpBBCcLWDJqkRAIECBAgQIAA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rfXoo10QIECAAAECBAYiMMiwdSAbdlMCBAgQIECAAAECnyIgbDUeBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABku8WMQAAArpJREFUAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECBAgAABAgQIECBAgAABAgQIECAgbDUDBAgQIECAAAECBAgQIECAAAECBAgQKEFA2FoCoiUIECDw/7djhzQAAAAMw/y7nonBGjhojkaAAAECBAgQIECAAAECBAgQICC2+gABAgQIECBAgAABAgQIECBAgAABAgQGAbF1QDRBgAABAgQIECBAgAABAgQIECBAgAABsdUHCBAgQIAAAQIECBAgQIAAAQIECBAgMAiIrQOiCQIECBAgQIAAAQIECBAgQIAAAQIECIitPkCAAAECBAgQIECAAAECBAgQIECAAIFBQGwdEE0QIECAAAECBAgQIECAAAECBAgQIEBAbPUBAgQIECBAgAABAgQIECBAgAABAgQIDAJi64BoggABAgQIECBAgAABAgQIECBAgAABAmKrDxAgQIAAAQIECBAgQIAAAQIECBAgQGAQCLTd5zLJkAG8AAAAAElFTkSuQmCC", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qprof.get_cpu_time(kind=\"bar\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "08507a28-ff30-4cf1-88b9-082af2642cd8", "metadata": {}, "source": [ "### QProf execution report" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4c8c261f", "metadata": {}, "source": [ "The QProf object can also generate a report that includes various performence metrics, including which operation took the most amount of time:" ] }, { "cell_type": "code", "execution_count": 40, "id": "b211a647-9a46-4b54-ad05-8136357c5b96", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Abc
node_name
Varchar(128)
Abc
operator_name
Varchar(128)
123
path_id
Integer
123
exec_time_ms
Numeric(38)
123
est_rows
Integer
123
proc_rows
Integer
123
prod_rows
Integer
123
rle_prod_rows
Integer
123
cstall_us
Integer
123
pstall_us
Integer
123
clock_time_us
Integer
123
mem_res_mb
Numeric(38)
123
mem_all_mb
Numeric(38)
123
bytes_spilled
Integer
1v_demo_node0001StorageUnion346.342[null][null]16521652[null][null][null]8.4[null][null]
2v_demo_node0001Join337.4719999[null]16521652[null][null]37786[null][null][null]
3v_demo_node0001StorageUnion519.024[null][null]2816528165[null][null][null]4.7[null][null]
4v_demo_node0001ExprEval215.7149999[null]16521652[null][null]157602.2[null][null]
5v_demo_node0001Scan55.9459997281652816528165[null][null]62620.0[null][null]
6v_demo_node0001ExprEval14.466[null][null]16521652[null][null]44590.1[null][null]
7v_demo_node0001TopK12.759999[null]1010[null][null]21900.8[null][null]
8v_demo_node0001Scan40.8199999830016521652[null][null]8240.0[null][null]
9v_demo_node0001Root-10.127[null][null]10[null][null][null]131[null][null][null]
10v_demo_node0001NewEENode-10.069[null][null]1010[null][null]720.4[null][null]
11v_demo_node0001TopK00.03110[null]1010[null][null]300.1[null][null]
12v_demo_node0001ExprEval00.01710[null]1010[null][null]170.1[null][null]
Rows: 1-12 | Columns: 14
" ], "text/plain": [ "None node_name operator_name path_id exec_time_ms \\\\\n", "1 v_demo_node0001 StorageUnion 3 46.342 \\\\\n", "2 v_demo_node0001 Join 3 37.471 \\\\\n", "3 v_demo_node0001 StorageUnion 5 19.024 \\\\\n", "4 v_demo_node0001 ExprEval 2 15.714 \\\\\n", "5 v_demo_node0001 Scan 5 5.945 \\\\\n", "6 v_demo_node0001 ExprEval 1 4.466 \\\\\n", "7 v_demo_node0001 TopK 1 2.75 \\\\\n", "8 v_demo_node0001 Scan 4 0.819 \\\\\n", "9 v_demo_node0001 Root -1 0.127 \\\\\n", "10 v_demo_node0001 NewEENode -1 0.069 \\\\\n", "11 v_demo_node0001 TopK 0 0.031 \\\\\n", "12 v_demo_node0001 ExprEval 0 0.017 \\\\\n", "None est_rows proc_rows prod_rows rle_prod_rows \\\\\n", "1 None None 1652 1652 \\\\\n", "2 9999 None 1652 1652 \\\\\n", "3 None None 28165 28165 \\\\\n", "4 9999 None 1652 1652 \\\\\n", "5 9997 28165 28165 28165 \\\\\n", "6 None None 1652 1652 \\\\\n", "7 9999 None 10 10 \\\\\n", "8 9999 8300 1652 1652 \\\\\n", "9 None None 10 None \\\\\n", "10 None None 10 10 \\\\\n", "11 10 None 10 10 \\\\\n", "12 10 None 10 10 \\\\\n", "None cstall_us pstall_us clock_time_us mem_res_mb \\\\\n", "1 None None None 8.4 \\\\\n", "2 None None 37786 None \\\\\n", "3 None None None 4.7 \\\\\n", "4 None None 15760 2.2 \\\\\n", "5 None None 6262 0.0 \\\\\n", "6 None None 4459 0.1 \\\\\n", "7 None None 2190 0.8 \\\\\n", "8 None None 824 0.0 \\\\\n", "9 None None 131 None \\\\\n", "10 None None 72 0.4 \\\\\n", "11 None None 30 0.1 \\\\\n", "12 None None 17 0.1 \\\\\n", "None mem_all_mb bytes_spilled \n", "1 None None \n", "2 None None \n", "3 None None \n", "4 None None \n", "5 None None \n", "6 None None \n", "7 None None \n", "8 None None \n", "9 None None \n", "10 None None \n", "11 None None \n", "12 None None \n", "Rows: 1-12 | Columns: 14" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.get_qexecution_report().sort({'exec_time_ms':'desc'})" ] }, { "attachments": {}, "cell_type": "markdown", "id": "6ae6fe21", "metadata": {}, "source": [ "To view the query execution details:" ] }, { "cell_type": "code", "execution_count": 41, "id": "fa53f353-0c50-4218-94db-b5cd179cb074", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "branchvalues": "total", "ids": [ "path_id=3__StorageUni", "path_id=3__Join", "path_id=5__StorageUni", "path_id=2__ExprEval", "path_id=5__Scan", "path_id=1__ExprEval", "path_id=1__TopK", "path_id=4__Scan", "path_id=-1__Root", "path_id=-1__NewEENode", "path_id=0__TopK", "path_id=0__ExprEval", "StorageUnion", "Join", "ExprEval", "Scan", "TopK", "Root", "NewEENode" ], "labels": [ "path_id=3", "path_id=3", "path_id=5", "path_id=2", "path_id=5", "path_id=1", "path_id=1", "path_id=4", "path_id=-1", "path_id=-1", "path_id=0", "path_id=0", "StorageUnion", "Join", "ExprEval", "Scan", "TopK", "Root", "NewEENode" ], "marker": { "colors": [ "#1A6AFF", "#000000", "#9C9C9C", "#FE5016", "#FDE159", "#33C180", "#4E2A84", "#00008B", "#800080", "#DA70D6", "#FFC0CB", "#F0FFFF", "#8B4513", "#F5FFFA", "#FFE4C4", "#B22222", "#A9A9A9", "#B0C4DE", "#778899", "#00FF00", "#FFF0F5", "#008000", "#87CEFA", "#2E8B57", "#483D8B", "#87CEEB", "#FF4500", "#FFE4E1", "#FFFF00", "#FFF5EE", "#6A5ACD", "#FFA07A", "#006400", "#F0F8FF", "#CD5C5C", "#6495ED", "#808080", "#FFA500", "#D2B48C", "#7FFF00", "#FFF8DC", "#FFFFFF", "#EE82EE", "#F0FFF0", "#D2691E", "#1E90FF", "#DC143C", "#4B0082", "#008B8B", "#FFDAB9", "#32CD32", "#FFDEAD", "#F0E68C", "#556B2F", "#8FBC8F", "#663399", "#ADD8E6", "#A52A2A", "#FFFFE0", "#FF1493", "#E6E6FA", "#E0FFFF", "#BDB76B", "#00BFFF", "#696969", "#0000CD", "#708090", "#F5F5F5", "#40E0D0", "#C0C0C0", "#F08080", "#8A2BE2", "#8B0000", "#98FB98", "#FA8072", "#FFE4B5", "#00FFFF", "#FAEBD7", "#FFFACD", "#D3D3D3", "#7FFFD4", "#2F4F4F", "#5F9EA0", "#3CB371", "#AFEEEE", "#FFB6C1", "#FDF5E6", "#008080", "#FF0000", "#B0E0E6", "#000080", "#FFFAF0", "#9400D3", "#800000", "#FF69B4", "#90EE90", "#FF00FF", "#F5DEB3", "#00FF7F", "#9370DB", "#7CFC00", "#4169E1", "#E9967A", "#F5F5DC", "#FFFAFA", "#D8BFD8", "#48D1CC", "#00CED1", "#191970", "#4682B4", "#9932CC", "#FFFFF0", "#DAA520", "#228B22", "#BC8F8F", "#808000", "#C71585", "#FF6347", "#FF8C00", "#EEE8AA", "#F4A460", "#CD853F", "#F8F8FF", "#9ACD32", "#8B008B", "#DB7093", "#20B2AA", "#ADFF2F", "#FFEBCD", "#7B68EE", "#B8860B", "#FAFAD2", "#FF7F50", "#DEB887", "#BA55D3", "#FFEFD5", "#66CDAA", "#FAF0E6", "#00FA9A", "#DCDCDC", "#6B8E23", "#DDA0DD", "#FFD700", "#0000FF", "#A0522D" ], "line": { "width": 2 } }, "outsidetextfont": { "size": 20 }, "parents": [ "StorageUnion", "Join", "StorageUnion", "ExprEval", "Scan", "ExprEval", "TopK", "Scan", "Root", "NewEENode", "TopK", "ExprEval", "", "", "", "", "", "", "" ], "type": "sunburst", "values": [ 46.342, 37.471, 19.024, 15.714, 5.945, 4.466, 2.75, 0.819, 0.127, 0.069, 0.031, 0.017, 65.366, 37.471, 20.197, 6.764, 2.781, 0.127, 0.069 ] } ], "layout": { "autosize": true, "margin": { "b": 0, "l": 0, "r": 0, "t": 0 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "#C8D4E3" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": { "angularaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" }, "bgcolor": "white", "radialaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "yaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "zaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "baxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "bgcolor": "white", "caxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 } } } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qprof.get_qexecution()" ] }, { "cell_type": "markdown", "id": "1baa3a78-b187-4d98-b8aa-d6f0b6fdefc3", "metadata": {}, "source": [ "### QProf Summary Report Export" ] }, { "cell_type": "markdown", "id": "f0646447-8d21-4a5d-ae99-0dc5eeccaea0", "metadata": {}, "source": [ "You can also easily export the entire report in an HTML format. This report can be read without having any connection to database or a jupyter environment making it very convenient to share and analyze offline." ] }, { "cell_type": "code", "execution_count": 42, "id": "7352764e-7029-4079-920a-3f347141b70e", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/site-packages/verticapy/plotting/_utils.py:106: Warning:\n", "\n", "This plot is not yet available using the 'plotly' module.\n", "This plot will be drawn by using the 'highcharts' module.\n", "You can switch to any graphical library by using the 'set_option' function.\n", "The following example sets matplotlib as graphical library:\n", "import verticapy\n", "verticapy.set_option('plotting_lib', 'matplotlib')\n", "\n" ] }, { "data": { "text/plain": [ "'\\n \\n \\n \\n \\n \\n Query Profiling Report\\n \\n \\n \\n \\n \\n

System Configuration

\\n
    \\n
  • Cluster Information:
    Abc
    host_name
    Varchar(128)
    123
    open_files_limit
    Integer
    123
    threads_limit
    Integer
    123
    core_file_limit_max_size_bytes
    Integer
    123
    processor_count
    Integer
    123
    processor_core_count
    Integer
    Abc
    Varchar(8192)
    123
    opened_file_count
    Integer
    123
    opened_socket_count
    Integer
    123
    opened_nonfile_nonsocket_count
    Integer
    123
    total_memory_bytes
    Integer
    123
    total_memory_free_bytes
    Integer
    123
    total_buffer_memory_bytes
    Integer
    123
    total_memory_cache_bytes
    Integer
    123
    total_swap_memory_bytes
    Integer
    123
    total_swap_memory_free_bytes
    Integer
    123
    disk_space_free_mb
    Integer
    123
    disk_space_used_mb
    Integer
    123
    disk_space_total_mb
    Integer
    123
    system_open_files
    Integer
    123
    system_max_files
    Integer
    1127.0.0.110485762554220120681033485598720258474352641509785612244828168589934592858993459295565275365103101838409223372036854775807
    Rows: 1-1 | Columns: 21
  • \\n
  • Cluster Report:
    Abc
    node_name
    Varchar(128)
    123
    pool_oid
    Integer
    Abc
    pool_name
    Varchar(128)
    010
    is_internal
    Boolean
    123
    memory_size_kb
    Integer
    123
    memory_size_actual_kb
    Integer
    123
    memory_inuse_kb
    Integer
    123
    general_memory_borrowed_kb
    Integer
    123
    queueing_threshold_kb
    Integer
    123
    max_memory_size_kb
    Integer
    123
    max_query_memory_size_kb
    Integer
    123
    running_query_count
    Integer
    123
    planned_concurrency
    Integer
    123
    max_concurrency
    Integer
    010
    is_standalone
    Boolean
    📅
    queue_timeout
    Interval day to second
    123
    queue_timeout_in_seconds
    Integer
    Abc
    execution_parallelism
    Varchar(128)
    123
    priority
    Integer
    Abc
    runtime_priority
    Varchar(128)
    123
    runtime_priority_threshold
    Integer
    123
    runtimecap_in_seconds
    Integer
    Abc
    single_initiator
    Varchar(128)
    123
    query_budget_kb
    Integer
    Abc
    cpu_affinity_set
    Varchar(256)
    Abc
    cpu_affinity_mask
    Varchar(1024)
    Abc
    cpu_affinity_mode
    Varchar(128)
    1v_demo_node000145035996273705004general
    2476453024764530002352630424764530[null]013[null]
    relativedelta(minutes=+5)300AUTO0MEDIUM2[null]false1809715fffffANY
    2v_demo_node000145035996273705006sysquery
    104857610485764034802463133225927718[null]113[null]
    relativedelta(minutes=+5)300AUTO110HIGH0[null]false80659fffffANY
    3v_demo_node000145035996273705008tm
    31457283145728002662362628024870[null]077
    relativedelta(minutes=+5)300AUTO105MEDIUM60[null]true449389fffffANY
    4v_demo_node000145035996273705010refresh
    00002363518424879142[null]04[null]
    relativedelta(minutes=+5)300AUTO-10MEDIUM60[null]true5881576fffffANY
    5v_demo_node000145035996273705012recovery
    00002363518424879142[null]02211
    relativedelta(minutes=+5)300AUTO107MEDIUM60[null]true1069377fffffANY
    6v_demo_node000145035996273705014dbd
    00002363518424879142[null]04[null]
    relativedelta()0AUTO0MEDIUM0[null]true5881576fffffANY
    7v_demo_node000145035996273705092jvm
    000019922942097152[null]013[null]
    relativedelta(minutes=+5)300AUTO0MEDIUM2[null]false153253fffffANY
    8v_demo_node000145035996273705102blobdata
    000027619762907344[null]020
    relativedelta()0AUTO0HIGH0[null]false[null]fffffANY
    9v_demo_node000145035996273705104metadata
    114612114612002363518424879142[null]010
    relativedelta()0AUTO108HIGH0[null]false[null]fffffANY
    Rows: 1-9 | Columns: 27
  • \\n
\\n\\n

Query Execution Report

\\n
Abc
node_name
Varchar(128)
Abc
operator_name
Varchar(128)
123
path_id
Integer
123
exec_time_ms
Numeric(38)
123
est_rows
Integer
123
proc_rows
Integer
123
prod_rows
Integer
123
rle_prod_rows
Integer
123
cstall_us
Integer
123
pstall_us
Integer
123
clock_time_us
Integer
123
mem_res_mb
Numeric(38)
123
mem_all_mb
Numeric(38)
123
bytes_spilled
Integer
1v_demo_node0001Join337.4719999[null]16521652[null][null]37786[null][null][null]
2v_demo_node0001ExprEval215.7149999[null]16521652[null][null]157602.2[null][null]
3v_demo_node0001TopK12.759999[null]1010[null][null]21900.8[null][null]
4v_demo_node0001Scan40.8199999830016521652[null][null]8240.0[null][null]
5v_demo_node0001Scan55.9459997281652816528165[null][null]62620.0[null][null]
6v_demo_node0001TopK00.03110[null]1010[null][null]300.1[null][null]
7v_demo_node0001ExprEval00.01710[null]1010[null][null]170.1[null][null]
8v_demo_node0001ExprEval14.466[null][null]16521652[null][null]44590.1[null][null]
9v_demo_node0001Root-10.127[null][null]10[null][null][null]131[null][null][null]
10v_demo_node0001StorageUnion346.342[null][null]16521652[null][null][null]8.4[null][null]
11v_demo_node0001StorageUnion519.024[null][null]2816528165[null][null][null]4.7[null][null]
12v_demo_node0001NewEENode-10.069[null][null]1010[null][null]720.4[null][null]
Rows: 1-12 | Columns: 14
\\n\\n

Execution Time on Each Node

\\n
\\n
\\n\\n

CPU Time Distribution

\\n
\\n
\\n\\n

Query Steps

\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Loading....
\\n\\n\\n \\n\\n \\n
\\n\\n

Query Plan plot

\\n
\\n
\\n\\n

Query Plan Tree

\\n
\\n\\n\\n\\n\\n\\nTree\\n\\n\\n\\nlegend_annotations\\n\\n\\n\\n\\nPath transition\\n\\n\\nO\\n\\n\\nOUTER\\n\\n\\nI\\n\\n\\nINNER\\n\\n\\nF\\n\\n\\nFILTER\\n\\n\\nH\\n\\n\\nHASH\\n\\n\\n\\nlegend0\\n\\n\\nExecution time in ms\\n\\n\\n0\\n\\n\\n2\\n\\n\\n8\\n\\n\\n27\\n\\n\\n83\\n\\n\\n\\nlegend1\\n\\n\\nProduced row count\\n\\n\\n20\\n\\n\\n150\\n\\n\\n1K\\n\\n\\n8K\\n\\n\\n56K\\n\\n\\n\\n0\\n\\n\\n\\n.\\n\\n\\n0\\n\\n\\n🔍\\n\\n\\n.\\n\\n\\n\\n\\n\\n\\n1\\n\\n\\n\\n.\\n\\n\\n1\\n\\n\\n🔀\\n\\n\\n.\\n\\n\\n\\n\\n\\n\\n0->1\\n\\n\\n  \\n\\n\\n\\n3\\n\\n\\n\\n.\\n\\n\\n3\\n\\n\\n🔗\\n\\n\\n.\\n\\n\\n\\n\\n\\n\\n1->3\\n\\n\\n  \\n\\n\\n\\n4\\n\\n\\n\\n.\\n\\n\\n4\\n\\n\\n🗄️\\n\\n\\n.\\n\\n\\nv_interna..\\n\\n\\n\\n\\n\\n\\n3->4\\n\\n\\n O \\n\\n\\n\\n5\\n\\n\\n\\n.\\n\\n\\n5\\n\\n\\n🗄️\\n\\n\\n.\\n\\n\\nv_interna..\\n\\n\\n\\n\\n\\n\\n3->5\\n\\n\\n I-H \\n\\n\\n\\n
\\n\\n \\n \\n '" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprof.to_html(\"my-report.html\") # Where \"my-report.html\" is the path of the file to save." ] }, { "cell_type": "code", "execution_count": null, "id": "5e4c38b8-47c5-4089-8907-355d0de4fa12", "metadata": {}, "outputs": [], "source": [] } ], "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.13" } }, "nbformat": 4, "nbformat_minor": 5 }