Ë
    µŒj`  ã                  óX   — d dl mZ d dlmZmZmZmZmZ er
d dlm	Z	m
Z
mZ  G d„ d«      Zy)é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚIterableÚListÚOptional)Ú	DataFrameÚRowÚSparkSessionc                  ó¸   — e Zd ZdZ	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Ze	 d	 	 	 	 	 	 	 dd„«       Zdd„Zdd„Zdd„Z	ddd„Z
dd	„Zdd
„Zdd„Zddd„Zddd„Zddd„Zy)ÚSparkSQLz;SparkSQL is a utility class for interacting with Spark SQL.Nc                óH  — 	 ddl m} |r|n|j                  j	                  «       | _        |�%| j
                  j                  j                  |«       |�%| j
                  j                  j                  |«       t        | j                  «       «      | _        |rt        |«      n	t        «       | _        | j                  r*| j                  | j                  z
  }|rt        d|› d�«      ‚|rt        |«      n	t        «       | _        | j                  r*| j                  | j                  z
  }|rt        d|› d�«      ‚| j                  «       }	|	rt        |	«      n| j                  | _        t#        |t$        «      st'        d«      ‚|| _        y# t        $ r t        d«      ‚w xY w)	aÁ  Initialize a SparkSQL object.

        Args:
            spark_session: A SparkSession object.
              If not provided, one will be created.
            catalog: The catalog to use.
              If not provided, the default catalog will be used.
            schema: The schema to use.
              If not provided, the default schema will be used.
            ignore_tables: A list of tables to ignore.
              If not provided, all tables will be used.
            include_tables: A list of tables to include.
              If not provided, all tables will be used.
            sample_rows_in_table_info: The number of rows to include in the table info.
              Defaults to 3.
        r   ©r   úFpyspark is not installed. Please install it with `pip install pyspark`Nzinclude_tables ú not found in databasezignore_tables z,sample_rows_in_table_info must be an integer)Úpyspark.sqlr   ÚImportErrorÚbuilderÚgetOrCreateÚ_sparkÚcatalogÚsetCurrentCatalogÚsetCurrentDatabaseÚsetÚ_get_all_table_namesÚ_all_tablesÚ_include_tablesÚ
ValueErrorÚ_ignore_tablesÚget_usable_table_namesÚ_usable_tablesÚ
isinstanceÚintÚ	TypeErrorÚ_sample_rows_in_table_info)
ÚselfÚspark_sessionr   ÚschemaÚignore_tablesÚinclude_tablesÚsample_rows_in_table_infor   Úmissing_tablesÚusable_tabless
             úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/utilities/spark_sql.pyÚ__init__zSparkSQL.__init__   sˆ  € ð2	Ý0ñ +‰M°×0DÑ0D×0PÑ0PÓ0Rð 	Œð ÐØ�K‰K×Ñ×1Ñ1°'Ô:ØÐØ�K‰K×Ñ×2Ñ2°6Ô:ä˜t×8Ñ8Ó:Ó;ˆÔÙ6Dœs >Ô2Ì#Ë%ˆÔØ×ÒØ!×1Ñ1°D×4DÑ4DÑDˆNÙÜ Ø% nÐ%5Ð5KÐLóð ñ 5Bœc -Ô0ÄsÃuˆÔØ×ÒØ!×0Ñ0°4×3CÑ3CÑCˆNÙÜ Ø$ ^Ð$4Ð4JÐKóð ð ×3Ñ3Ó5ˆÙ4Aœc -Ô0Àt×GWÑGWˆÔäÐ3´SÔ9ÜÐJÓKÐKà*CˆÕ'øôE ò 	ÜØXóð ð	ús   ‚F ÆF!c                ó¤   — 	 ddl m} |j                  j	                  |«      j                  «       } | |fi |¤ŽS # t        $ r t        d«      ‚w xY w)zzCreating a remote Spark Session via Spark connect.
        For example: SparkSQL.from_uri("sc://localhost:15002")
        r   r   r   )r   r   r   r   Úremoter   )ÚclsÚdatabase_uriÚengine_argsÚkwargsr   Úsparks         r.   Úfrom_urizSparkSQL.from_uriK   s\   € ð	Ý0ð ×$Ñ$×+Ñ+¨LÓ9×EÑEÓGˆÙ�5Ñ#˜FÑ#Ð#øô ò 	ÜØXóð ð	ús	   ‚: ºAc                óv   — | j                   r| j                   S t        | j                  | j                  z
  «      S )zGet names of tables available.)r   Úsortedr   r   )r&   s    r.   r    zSparkSQL.get_usable_table_names\   s3   € à×ÒØ×'Ñ'Ð'ä�d×&Ñ&¨×)<Ñ)<Ñ<Ó=Ð=ó    c                óž   — | j                   j                  d«      j                  d«      j                  «       }t	        t        d„ |«      «      S )NzSHOW TABLESÚ	tableNamec                ó   — | j                   S ©N)r<   )Úrows    r.   Ú<lambda>z/SparkSQL._get_all_table_names.<locals>.<lambda>e   s   €  C§M¢Mr:   )r   ÚsqlÚselectÚcollectÚlistÚmap)r&   Úrowss     r.   r   zSparkSQL._get_all_table_namesc   s;   € Ø�{‰{�‰˜}Ó-×4Ñ4°[ÓA×IÑIÓKˆÜ”CÑ1°4Ó8Ó9Ð9r:   c                ó¦   — | j                   j                  d|› �«      j                  «       d   j                  }|j	                  d«      }|d | dz   S )NzSHOW CREATE TABLE r   ÚUSINGÚ;)r   rA   rC   Úcreatetab_stmtÚfind)r&   ÚtableÚ	statementÚusing_clause_indexs       r.   Ú_get_create_table_stmtzSparkSQL._get_create_table_stmtg   sX   € à�K‰K�O‰OÐ0°°Ð8Ó9×AÑAÓCÀAÑF×UÑUð 	ð 'Ÿ^™^¨GÓ4ÐØÐ,Ð,Ð-°Ñ3Ð3r:   c                óX  — | j                  «       }|�-t        |«      j                  |«      }|rt        d|› d�«      ‚|}g }|D ]R  }| j	                  |«      }| j
                  r"|dz  }|d| j                  |«      › d�z  }|dz  }|j                  |«       ŒT dj                  |«      }|S )Nztable_names r   z

/*Ú
z*/z

)	r    r   Ú
differencer   rO   r%   Ú_get_sample_spark_rowsÚappendÚjoin)r&   Útable_namesÚall_table_namesr,   ÚtablesÚ
table_nameÚ
table_infoÚ	final_strs           r.   Úget_table_infozSparkSQL.get_table_infoo   sÆ   € Ø×5Ñ5Ó7ˆØÐ"Ü  Ó-×8Ñ8¸ÓIˆNÙÜ  <°Ð/?Ð?UÐ!VÓWÐWØ)ˆOØˆÛ)ˆJØ×4Ñ4°ZÓ@ˆJØ×.Ò.Ø˜hÑ&�
Ø  4×#>Ñ#>¸zÓ#JÐ"KÈ2ÐNÑN�
Ø˜dÑ"�
Ø�M‰M˜*Õ%ð *ð —K‘K Ó'ˆ	ØÐr:   c                ó¨  — d|› d| j                   › �}| j                  j                  |«      }dj                  t	        t        d„ |j                  j                  «      «      «      }	 | j                  |«      }dj                  |D �cg c]  }dj                  |«      ‘Œ c}«      }| j                   › d|› d|› d|› �S c c}w # t        $ r d}Y Œ)w xY w)	NzSELECT * FROM z LIMIT Ú	c                ó   — | j                   S r>   )Úname)Úfs    r.   r@   z1SparkSQL._get_sample_spark_rows.<locals>.<lambda>„   s   € °1·6²6r:   rQ   Ú z rows from z table:
)
r%   r   rA   rU   rD   rE   r(   ÚfieldsÚ_get_dataframe_resultsÚ	Exception)r&   rL   ÚqueryÚdfÚcolumns_strÚsample_rowsr?   Úsample_rows_strs           r.   rS   zSparkSQL._get_sample_spark_rows�   sÓ   € Ø    w¨t×/NÑ/NÐ.OÐPˆØ�[‰[�_‰_˜UÓ#ˆØ—i‘i¤¤SÑ)9¸2¿9¹9×;KÑ;KÓ%LÓ MÓNˆð	!Ø×5Ñ5°bÓ9ˆKà"Ÿi™iÁ;Ó(OÁ;¸C¨¯©°3­À;Ñ(OÓPˆOð
 ×.Ñ.Ð/¨{¸5¸'ÀØˆm˜2ØÐð!ð	
ùò	 )PøÜò 	!Ø ŠOð	!ús$   Á( C ÂB>Â C Â>C ÃCÃCc                ól   — t        t        t        |j                  «       j	                  «       «      «      S r>   )ÚtuplerE   ÚstrÚasDictÚvalues)r&   r?   s     r.   Ú_convert_row_as_tuplezSparkSQL._convert_row_as_tuple’   s#   € Ü”Sœ˜cŸj™j›l×1Ñ1Ó3Ó4Ó5Ð5r:   c                ó\   — t        t        | j                  |j                  «       «      «      S r>   )rD   rE   rp   rC   )r&   rg   s     r.   rd   zSparkSQL._get_dataframe_results•   s    € Ü”C˜×2Ñ2°B·J±J³LÓAÓBÐBr:   c                ó˜   — | j                   j                  |«      }|dk(  r|j                  d«      }t        | j	                  |«      «      S )NÚoneé   )r   rA   Úlimitrm   rd   )r&   ÚcommandÚfetchrg   s       r.   ÚrunzSparkSQL.run˜   s>   € Ø�[‰[�_‰_˜WÓ%ˆØ�EŠ>Ø—‘˜!“ˆBÜ�4×.Ñ.¨rÓ2Ó3Ð3r:   c                ó^   — 	 | j                  |«      S # t        $ r}	 d|› �cY d}~S d}~ww xY w)af  Get information about specified tables.

        Follows best practices as specified in: Rajkumar et al, 2022
        (https://arxiv.org/abs/2204.00498)

        If `sample_rows_in_table_info`, the specified number of sample rows will be
        appended to each table description. This can increase performance as
        demonstrated in the paper.
        úError: N)r\   r   )r&   rV   Úes      r.   Úget_table_info_no_throwz SparkSQL.get_table_info_no_throwž   s7   € ð	!Ø×&Ñ& {Ó3Ð3øÜò 	!Ø*Ø˜Q˜C�=Õ ûð	!ús   ‚ “	,œ'¡,§,c                ó`   — 	 | j                  ||«      S # t        $ r}	 d|› �cY d}~S d}~ww xY w)a*  Execute a SQL command and return a string representing the results.

        If the statement returns rows, a string of the results is returned.
        If the statement returns no rows, an empty string is returned.

        If the statement throws an error, the error message is returned.
        rz   N)rx   re   )r&   rv   rw   r{   s       r.   Úrun_no_throwzSparkSQL.run_no_throw®   s7   € ð	!Ø—8‘8˜G UÓ+Ð+øÜò 	!Ø*Ø˜Q˜C�=Õ ûð	!ús   ‚ ”	-�(¢-¨-)NNNNNé   )r'   zOptional[SparkSession]r   úOptional[str]r(   r€   r)   úOptional[List[str]]r*   r�   r+   r#   r>   )r3   rm   r4   zOptional[dict]r5   r   Úreturnr   )r‚   zIterable[str])rL   rm   r‚   rm   )rV   r�   r‚   rm   )r?   r
   r‚   rl   )rg   r	   r‚   rD   )Úall)rv   rm   rw   rm   r‚   rm   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   Úclassmethodr7   r    r   rO   r\   rS   rp   rd   rx   r|   r~   © r:   r.   r   r   	   sÊ   „ ÙEð 15Ø!%Ø $Ø-1Ø.2Ø)*ð=Dà-ð=Dð ð=Dð ð	=Dð
 +ð=Dð ,ð=Dð $'ó=Dð~ à>Bð$Øð$Ø-;ð$ØNQð$à	ò$ó ð$ó >ó:ó4ôó$
ó"6óCô4ô!õ !r:   r   N)Ú
__future__r   Útypingr   r   r   r   r   r   r	   r
   r   r   r‰   r:   r.   Ú<module>rŒ      s#   ðÝ "ç ?Õ ?áß8Ñ8÷q!ò q!r:   