Enrique Vee avatar

Query SQL con los participantes del Hivepowerbday | Python + SQL + HiveSQL

enrique89

Published: 06 Apr 2023 › Updated: 06 Apr 2023Query SQL con los participantes del Hivepowerbday | Python + SQL + HiveSQL

Query SQL con los participantes del Hivepowerbday | Python + SQL + HiveSQL

image.png

¡Hola, Hivers!

Luego de conversar con victoriabsb@victoriabsb y ella plantearme la necesidad de que no quería sacar la tabla a mano relacionada con la iniciativa de "hivepowerbday", me pidió el favor de hacerlo de manera automatizada y acepté el reto, porque ya tengo experiencia extrayendo data de Hive vía Hive SQL

Sobre Hive SQL

Ella me dijo, quiero una tabla con lo siguiente:

Participantes de la iniciativa que tenga menos de 25k de HP y mas de 39 en Reputación, pero que hicieron Power UP durante la fecha de la iniciativa.

Vamos a la obra:

Inicié realizando un Query para comprobar que estoy usando de manera correcta el lenguaje y buscando los siguientes resultados

Autor de post, permlink, reputación y los vests

SELECT Comments.author, Comments.permlink, Accounts.reputation_ui, Accounts.vesting_shares
FROM comments (NOLOCK), Accounts
 
 
 
where Comments.depth = 0 and comments.created >= CONVERT(DATE,'2023-03-20') and comments.created < CONVERT(DATE,'2023-03-21') 

and Comments.author = Accounts.name

order by comments.created DESC



Luego procedí a ajustar más el Query para acercarme al resultado final que quiere victoriabsb@victoriabsb, entonces debo filtrar de esos post las personas que ese día publicaron y usaron el tag de la iniciativa.

El tag es: hivepowerbday

¿Cómo puedo hago eso? - Extrayendo con Tags

En Hive los tags se almacenan el JSON_METADATA de la publicación, así debo aplicar el filtro basado en esa información, pero usaré la tabla tags para que sea más fácil , como muestro a continuación:

SELECT Comments.author, Comments.permlink, Accounts.reputation_ui, Accounts.vesting_shares


FROM
    Tags
    INNER JOIN Comments ON Tags.comment_id = Comments.ID
    INNER JOIN Accounts ON Comments.author = Accounts.name


 
 
where Comments.depth = 0 and comments.created >= CONVERT(DATE,'2023-03-20') and comments.created < CONVERT(DATE,'2023-03-21') 


and Tags.tag = 'hivepowerbday'


order by comments.created DESC


Lo otro que me pidió victoria es que la hora pueda ajustar a la zona horaria de muchos países, así que voy a usar lo siguiente:

where Comments.depth = 0 and (comments.created AT TIME ZONE 'UTC') >= '2023-03-20 00:00:00' and (comments.created AT TIME ZONE 'UTC') <= '2023-03-21 06:00:00

Donde indico que la zona horaria sea UTC y la fecha final tenga 6 horas extras para incluir post que no publicaron al tiempo de UTC - 0

Ahora vamos con la fase final que es filtrar los usuarios que tienen reputación mayor a 39 y HP menor a 25k HP

Lo primero es convertir vests a Hive Power, para ello uso la tabla de DynamicGlobalProperties y utilizar el dato de hive_per_vest

SELECT 
    Comments.author, Comments.permlink, Accounts.reputation_ui, 
    (Accounts.vesting_shares * DynamicGlobalProperties.hive_per_vest) as hive_power



FROM
    Tags
    INNER JOIN Comments ON Tags.comment_id = Comments.ID
    INNER JOIN Accounts ON Comments.author = Accounts.name
    CROSS JOIN (SELECT hive_per_vest FROM DynamicGlobalProperties) DynamicGlobalProperties


 
 
where Comments.depth = 0 and (comments.created AT TIME ZONE 'UTC') >= '2023-03-20 00:00:00' and (comments.created AT TIME ZONE 'UTC') <= '2023-03-21 06:00:00'


and Tags.tag = 'hivepowerbday'


order by 

comments.created DESC




Ahora filtrar por reputación y HP, quedando de la siguiente manera:

SELECT 
    Comments.author, 
    Comments.permlink,
    Accounts.reputation_ui AS REP, 
    (Accounts.vesting_shares * DynamicGlobalProperties.hive_per_vest) AS HP



FROM
    Tags
    INNER JOIN Comments ON Tags.comment_id = Comments.ID
    INNER JOIN Accounts ON Comments.author = Accounts.name
    CROSS JOIN (SELECT hive_per_vest FROM DynamicGlobalProperties) DynamicGlobalProperties


 
 
where 
    Comments.depth = 0 
    and (comments.created AT TIME ZONE 'UTC') >= '2023-03-20 00:00:00' 
    and (comments.created AT TIME ZONE 'UTC') <= '2023-03-21 06:00:00' 
    and Accounts.reputation_ui >= '39'
    and (Accounts.vesting_shares * DynamicGlobalProperties.hive_per_vest) < '25000'
    and Tags.tag = 'hivepowerbday'


order by 

comments.created DESC


Ahora viene la parte un poco más complicada y por crear el QUERY que filtre quien hizo Power UP mayor a 10 HIVE, así que lo hice de la siguiente manera:

SELECT 
    Comments.author, 
    Comments.permlink,
    Accounts.reputation_ui AS REP, 
    (Accounts.vesting_shares * DynamicGlobalProperties.hive_per_vest) AS HP,
    COALESCE(SUM(TxTransfers.amount), 0) AS POWER_UP
    
    



FROM
    Tags
    INNER JOIN Comments ON Tags.comment_id = Comments.ID
    INNER JOIN Accounts ON Comments.author = Accounts.name
    CROSS JOIN (SELECT hive_per_vest FROM DynamicGlobalProperties) DynamicGlobalProperties
    LEFT JOIN TxTransfers ON Comments.author = TxTransfers."from" AND TxTransfers.type = 'transfer_to_vesting'
        AND (TxTransfers.timestamp AT TIME ZONE 'UTC') >= '2023-03-20 00:00:00'
        AND (TxTransfers.timestamp AT TIME ZONE 'UTC') <= '2023-03-21 06:00:00'


 
 
where 
    Comments.depth = 0 
    and (comments.created AT TIME ZONE 'UTC') >= '2023-03-20 00:00:00' 
    and (comments.created AT TIME ZONE 'UTC') <= '2023-03-21 06:00:00' 
    and Accounts.reputation_ui >= '39'
    and (Accounts.vesting_shares * DynamicGlobalProperties.hive_per_vest) < '25000'
    and Tags.tag = 'hivepowerbday'
    and TxTransfers.amount >= '10'


group by 

    Comments.author,
    Comments.permlink,
    Comments.created,
    Accounts.reputation_ui,
    Accounts.vesting_shares,
    DynamicGlobalProperties.hive_per_vest
    


order by Comments.created DESC;



Parte del resultado:

image.png

Ya tengo todo lo basé para poder hacer una tabla para mostrar todos los usuarios que participaron en la iniciativa, pero ahora la pregunta es ¿Cómo hago eso?

Ok lo haré usando Python

Procedí a realizar la operación y quedó de la siguiente manera:

import pymssql
import configparser

# Read the configuration file
config = configparser.ConfigParser()
config.read('config.ini')

# Get the Hivesql credentials
hivesql_account = config.get('hivesql', 'account')
hivesql_password = config.get('hivesql', 'password')

connection = pymssql.connect(server='vip.hivesql.io',
                             database='DBHive',
                             user=hivesql_account,
                             password=hivesql_password)
cursor = connection.cursor()

SQLCommand = ("""
SELECT 
    Comments.author, 
    Comments.permlink,
    Accounts.reputation_ui AS REP, 
    (Accounts.vesting_shares * DynamicGlobalProperties.hive_per_vest) AS HP,
    COALESCE(SUM(TxTransfers.amount), 0) AS POWER_UP
FROM
    Tags
    INNER JOIN Comments ON Tags.comment_id = Comments.ID
    INNER JOIN Accounts ON Comments.author = Accounts.name
    CROSS JOIN (SELECT hive_per_vest FROM DynamicGlobalProperties) DynamicGlobalProperties
    LEFT JOIN TxTransfers ON Comments.author = TxTransfers."from" AND TxTransfers.type = 'transfer_to_vesting'
        AND (TxTransfers.timestamp AT TIME ZONE 'UTC') >= '2023-03-20 00:00:00'
        AND (TxTransfers.timestamp AT TIME ZONE 'UTC') <= '2023-03-21 06:00:00'
WHERE 
    Comments.depth = 0 
    AND (Comments.created AT TIME ZONE 'UTC') >= '2023-03-20 00:00:00' 
    AND (Comments.created AT TIME ZONE 'UTC') <= '2023-03-21 06:00:00' 
    AND Accounts.reputation_ui >= '39'
    AND (Accounts.vesting_shares * DynamicGlobalProperties.hive_per_vest) < '25000'
    AND Tags.tag = 'hivepowerbday'
    AND TxTransfers.amount >= '10'
GROUP BY
    Comments.author,
    Comments.permlink,
    Comments.created,
    Accounts.reputation_ui,
    Accounts.vesting_shares,
    DynamicGlobalProperties.hive_per_vest
ORDER BY
    Comments.created DESC;
""")



cursor.execute(SQLCommand)
results = cursor.fetchall()

data = []

data.append(["Usuario", "Link", "Reputación", "HP", "Power UP"])

for row in results:
    author, permlink, rep, hp, power_up = row
    author_link = f"[{author}](peakd.com/@{author})"
    post_link = f"[Link](peakd.com/@{author}/{permlink})"
    data.append([author_link, post_link, round(rep), round(hp), round(power_up)])

connection.close()

# Markdown 
with open('tabla.txt', 'w', encoding='utf-8') as file:
    # Write the header
    file.write("| " + " | ".join(data[0]) + " |\n")
    file.write("|" + "----|" * len(data[0]) + "\n")

    # Write the data
    for row in data[1:]:
        file.write("| " + " | ".join([str(col) for col in row]) + " |\n")

print("Datos guardados en tabla.txt")



------------






Use la librería de pymssql para conectarme a HIVESQL, también usé un config.ini para guardar mis credenciales de HiveSQL

Luego que hice unas pruebas y adapté todo a lo que necesitaba que es una tabla que me permita pegar en peakd, el resultado es el siguiente.

UsuarioPostReputaciónHPPower UP
jimmy.adamesLink70499048
yeral-diazLink69149911
numa26Link6770910
miriannalisLink72616320
creacioneslelysLink73181110
alicia2022Link5612910
alterameliaLink6563511
nenioLink71898410
grindanLink68320510
yraimadiazLink67129510
ramadhanightLink67405710
epodcasterLink6472010
leticiapereiraLink67141016
nickydeeLink68231111
heyhaveyametLink745088123
ksamLink70156710
rosmiapureLink6434110
hallmannLink7624976500
chacald.dcymtLink72315710
nhaji01Link6233815
yelimarinLink6871410
nkemakonam89Link71277110
mistakiliLink75422120
asynckronismLink6148110
audiarmisgLink6989712
arzkyu97Link6556910
momogrowLink674996125
gaboamc2393Link72174652
womentribeLink547510
hopestylistLink69275415
vickolyLink72369710
grecki-bazar-ewyLink70901630
herbacianymagLink62108711
ben.haaseLink503410
samsmith1971Link69219910
master-lampsLink65995110
castri-jaLink67213230
rentmoneyLink731134611
soyunasantacruzLink74423723
dayadamLink69177820
valeriavalentinaLink68147810
depressedfuckupLink67145341
hannes-stoffelLink6494110
ahmadmangazapLink65134110
soy-laloretoLink71159811
avdesingLink6661210
arc7icwolfLink68256410
farideh.shahediLink6456810
cocacolaronLink6921110
gorayiiLink754783109
lunaticantoLink73252810
alexvanLink772474410
davidpena21Link73466530
samosticallyLink7358512
morenowLink69151611
tsunsicaLink70187712
idksamad78699Link67136550
therealflawsLink7346510
technicalsideLink72319726
soldierofdreamsLink72376011
tengolotodoLink71414322
ayesha-malikLink6681220
ahmetayLink69393010
stddLink67175310
nahupukuLink7362110
emaxisonlineLink6341711
zartishtLink72768411
itwithsmLink6838510
nocturyLink66200820
sacra97Link72705210
eddwoodLink68276110
virtualgrowthLink729110
hoosieLink71434810
jonsnow1983Link75302710
xuwiLink6029910
blitzzzzLink71385610
lisamgentile1961Link69606912
crptogeekLink6358115
abu78Link6446212
memessLink5629810
ylaffittepLink6450310
cescajoveLink6452120
zonadeescalofrioLink5916015
yahuzahLink6455711
jfang003Link72632810
milaanLink686810
cthingsLink6264010
rtonlineLink73906050
rokyLink6152610
janeteditaLink68152110
ablazeLink72990410
filoriologoLink72165010
guurry123Link71318111
yeckingo1Link68198435
palabras1Link70263730
steemmillionaireLink691735520
rubiluLink6691810
wolfofnostreetLink72108335
orimusicLink7022110
bhattgLink741471855
matisportLink4712111
nftfrappeLink6427550
matthewboxLink69134811
coquicoinLink71616210
jfujiLink66104111
princessbusayoLink70251820
lizelleLink771090420
katerinarammLink749171100
crisch23Link69230550
jluferLink78198913
jacoalbertsLink67161015
collinzLink723720101
slothlydoesitLink59263310
jimmy.adamesLink70499048
seckoramaLink741428415
wrestlingdesiresLink70339611
simplifylifeLink731363451
arcgspyLink6255510
sayeeLink74692310
jijisaurartLink68183510
cindee08Link6386650
agresteLink6590930
hjrrodriguezLink67260930
lhesLink66126713
karizmaLink67158915
menatiLink6696310
evernoticethatLink6969910
misshugoLink66175822
lordshahLink6684115
queen-silviaLink68199210
imfarhadLink69565773
bitandiLink731014610
shawnnftLink6693010
ravenmus1cLink68132613
itsostylishLink70368330
elbuhitoLink6330910
awildovasquezLink66133697
pinkchicLink69318730
shiekhnoumanLink6335411
poplar-22Link6561510
nanixxxLink6585815
incublusLink72748720
bradleyarrowLink75363813
dewabrataLink69229115
chichi18Link6586210
jhymiLink6121010
quduus1Link70271015
luckyaliLink72296844
steemflowLink7723483150
elyelmaLink5640110
ifarmgirl-leoLink65101412
denisdaLink6025820
saydieLink6859630
garorantLink5812110
invest4freeLink64116826
dlmmqbLink68156720
merit.ahamaLink72445130
flquinLink6126312
intisharLink6250410
borsengelaberLink66668610
offgridlifeLink758100110
beauty197Link5614711
relf87Link69196910
jordy0827Link6451210
kaiggueLink5512211
jane1289Link71472450
theacksLink6027410
ctrpchLink6514445165
pravesh0Link69270380
reeta0119Link7718715108
ifarmgirlLink73967630
codingdefinedLink731832425
tydynrainLink67168610
adcreatordesignLink539810
beststartLink6211721100

Pero hagamos que sea más divertida la tabla, ordenando por la cantidad de HP colocado en Stake y que pueda en enumerar las filas.

#UsuarioLinkReputaciónHPPower UP
1hallmannLink7624976500
2steemflowLink7723483150
3momogrowLink674996125
4heyhaveyametLink745088123
5ctrpchLink6514445120
6reeta0119Link7718715108
7collinzLink723720101
8katerinarammLink749171100
9beststartLink6211722100
10awildovasquezLink66133697
11pravesh0Link69270380
12imfarhadLink69565773
13gorayiiLink75478363
14offgridlifeLink75810060
15bhattgLink741471855
16gaboamc2393Link72174652
17simplifylifeLink731363451
18rtonlineLink73906050
19nftfrappeLink6427550
20crisch23Link69230550
21cindee08Link6386650
22jane1289Link71472450
23idksamad78699Link67136550
24jimmy.adamesLink70499148
25jimmy.adamesLink70499148
26luckyaliLink72296844
27depressedfuckupLink67145341
28wolfofnostreetLink72108335
29yeckingo1Link68198435
30saydieLink6859630
31merit.ahamaLink72445130
32ifarmgirlLink73967630
33agresteLink6590930
34castri-jaLink67213330
35itsostylishLink70368330
36pinkchicLink69318730
37grecki-bazar-ewyLink70902230
38palabras1Link70263730
39hjrrodriguezLink67260930
40davidpena21Link73468030
41technicalsideLink72319726
42invest4freeLink64116826
43codingdefinedLink731832425
44soyunasantacruzLink74423723
45tengolotodoLink71414322
46misshugoLink66175822
47mistakiliLink75422120
48nocturyLink66200820
49ayesha-malikLink6681220
50incublusLink72748720
51princessbusayoLink70251820
52dlmmqbLink68156720
53miriannalisLink72616320
54lizelleLink771090420
55denisdaLink6025820
56steemmillionaireLink691735520
57dayadamLink69177820
58cescajoveLink6452120
59leticiapereiraLink67141016
60crptogeekLink6358115
61nanixxxLink6585815
62dewabrataLink69229115
63jacoalbertsLink67161015
64seckoramaLink741428415
65quduus1Link70271015
66hopestylistLink69275415
67lordshahLink6684115
68karizmaLink67158915
69nhaji01Link6233815
70zonadeescalofrioLink5916015
71jluferLink78198913
72ravenmus1cLink68132613
73lhesLink66126713
74bradleyarrowLink75363813
75flquinLink6126312
76lisamgentile1961Link69606912
77samosticallyLink7358512
78abu78Link6446212
79ifarmgirl-leoLink65101412
80tsunsicaLink70187712
81audiarmisgLink6989712
82zartishtLink72768411
83soldierofdreamsLink72376811
84jfujiLink66104111
85yahuzahLink6455711
86morenowLink69151611
87emaxisonlineLink6341711
88guurry123Link71318111
89kaiggueLink5512211
90matisportLink4712111
91yeral-diazLink69149911
92wrestlingdesiresLink70339611
93herbacianymagLink62108711
94nickydeeLink68231111
95rentmoneyLink731134611
96alterameliaLink6563511
97beauty197Link5614911
98soy-laloretoLink71159811
99shiekhnoumanLink6335411
100matthewboxLink69134811
101rosmiapureLink6434110
102jonsnow1983Link75302710
103farideh.shahediLink6456810
104janeteditaLink68152110
105tydynrainLink67168610
106nenioLink71898410
107evernoticethatLink6969910
108ben.haaseLink503410
109rubiluLink6691810
110rokyLink6152610
111xuwiLink6029910
112creacioneslelysLink73181110
113master-lampsLink65995110
114asynckronismLink6148110
115arcgspyLink6255510
116avdesingLink6661210
117vickolyLink72370310
118womentribeLink547510
119blitzzzzLink71385610
120therealflawsLink7346510
121ahmadmangazapLink65134110
122intisharLink6250510
123poplar-22Link6561510
124sayeeLink74692310
125menatiLink6696310
126epodcasterLink6472010
127slothlydoesitLink59263310
128chichi18Link6586210
129adcreatordesignLink539810
130itwithsmLink6838510
131chacald.dcymtLink72315710
132borsengelaberLink66668610
133queen-silviaLink68199210
134nkemakonam89Link71277810
135shawnnftLink6693010
136sacra97Link72705210
137alexvanLink772474410
138arc7icwolfLink68256410
139milaanLink686810
140jijisaurartLink69183510
141elbuhitoLink6330910
142jhymiLink6121010
143elyelmaLink5640110
144relf87Link69196910
145yraimadiazLink67129510
146memessLink5629810
147numa26Link6770910
148hoosieLink71434810
149lunaticantoLink73252810
150cocacolaronLink6921110
151jfang003Link72633010
152filoriologoLink72165110
153orimusicLink7022110
154samsmith1971Link69219910
155bitandiLink731014610
156nahupukuLink7362110
157ahmetayLink69393010
158virtualgrowthLink729110
159valeriavalentinaLink68147810
160ylaffittepLink6450310
161grindanLink68320510
162theacksLink6027410
163ramadhanightLink67405710
164garorantLink5812110
165ablazeLink72990410
166cthingsLink6264010
167eddwoodLink68276110
168ksamLink70156710
169arzkyu97Link6556910
170alicia2022Link5612910
171jordy0827Link6451210
172yelimarinLink6871410
173hannes-stoffelLink6494110
174stddLink67175310
175coquicoinLink71616310

Espero que le funcione a victoriabsb@victoriabsb toda la información suministrada en la publicación.

El que es programador puede copiar mi código y usarlo.

Leave Query SQL con los participantes del Hivepowerbday | Python + SQL + HiveSQL to:

Written by

Dev - Marketers

Read more #spanish posts


Best Posts From Enrique Vee

We have not curated any of enrique89's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From Enrique Vee