gaia.aip.de查询失效报错ValueError: No table found问题求助
问题描述
一个月前编写的使用astroquery向gaia.aip.de提交Gaia DR2天文数据查询的代码,此前反复测试运行正常,150条查询可成功返回104条结果。当前未对代码做任何修改,重新运行时150条查询仅2条成功。移除try/except异常捕获逻辑后触发ValueError: No table found报错。
核心查询逻辑
for i in range(len(ra)):#Modified Query for each object query1=""" SELECT bp_rp, parallax, pmra, pmdec, phot_g_mean_mag AS gp FROM gaiadr2.gaia_source WHERE 1 = CONTAINS(POINT('ICRS', ra, dec), """ query1=query1+" CIRCLE('ICRS'," +str(ra[i])+","+ str(dec[i])+","+str(diameter[i])+")"+")" string2=""" AND phot_g_mean_flux_over_error > 50 AND phot_rp_mean_flux_over_error > 20 AND phot_bp_mean_flux_over_error > 20 AND visibility_periods_used > 8 """ print(query1) query1=query1+string2 try:#Try the following code job = Gaia.launch_job(query1)#Launch query to gaia webpage print(job) results = job.get_results()#get results ascii.write(results, 'values'+str(count)+'.csv', format='csv', fast_writer=False) csv_files.append('values'+str(count)+'.csv')#store in CSV ages.append(agedata[i])#append data print(ages) count+=1#avoid re-writing CSV file by creating different ones except:#If the code throws any error, usually 'can't query' it will ignore the file, another filter to clean out any useless or bad data continue
完整报错堆栈
Traceback (most recent call last): File "read.py", line 120, in <module> job = Gaia.launch_job(query1)#Launch query to gaia webpage File "C:\ProgramData\Anaconda3\lib\site-packages\astroquery\gaia\core.py", line 846, in launch_job return TapPlus.launch_job(self, query=query, name=name, File "C:\ProgramData\Anaconda3\lib\site-packages\astroquery\utils\tap\core.py", line 344, in launch_job results = utils.read_http_response(response, output_format) File "C:\ProgramData\Anaconda3\lib\site-packages\astroquery\utils\tap\xmlparser\utils.py", line 42, in read_http_response result = APTable.read(data, format=astropyFormat) File "C:\ProgramData\Anaconda3\lib\site-packages\astropy\table\connect.py", line 61, in __call__ out = registry.read(cls, *args, **kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\astropy\io\registry.py", line 520, in read data = reader(*args, **kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\astropy\io\votable\connect.py", line 116, in read_table_votable raise ValueError("No table found") ValueError: No table found
问题成因
- Gaia服务端配置变更:gaia.aip.de的镜像站点近期可能调整了DR2数据表的访问权限、表路径,或是将默认查询版本切换为更高版本的Gaia数据,导致原有
gaiadr2.gaia_source表无法正常访问。 - astroquery默认配置变更:若本地astroquery包发生过自动更新,默认的Gaia查询端点可能从aip.de切换为ESA官方端点,ESA端点的限流规则更严格,也可能对DR2数据的访问做了额外限制。
- 查询参数超出服务端限制:代码中将直径转换为FOV时乘了100倍,部分查询的搜索半径过大,超出服务端单次查询允许的返回行数上限,直接被截断返回空结果。
- 服务端限流策略调整:aip.de近期可能收紧了匿名用户的查询频率、并发数限制,批量提交请求时大部分查询被拦截,返回空响应触发报错。
解决方案
- 显式固定查询端点和表版本:在代码导入模块后新增配置,强制指定查询aip.de端点和DR2版本的表:
from astroquery.gaia import Gaia Gaia.GAIA_SERVER = "https://gaia.aip.de/tap" Gaia.MAIN_GAIA_TABLE = "gaiadr2.gaia_source"
- 增加查询限流和重试逻辑:在查询循环中增加延迟和重试机制,避免被服务端限流拦截:
import time # 替换原有查询部分的try逻辑 max_retry = 3 for retry in range(max_retry): try: job = Gaia.launch_job(query1) results = job.get_results() break except ValueError as e: if "No table found" not in str(e): raise time.sleep(2) else: # 多次重试失败直接跳过该查询 continue
- 校验查询语句有效性:将打印出的失败查询语句复制到gaia.aip.de的TAP在线查询界面直接运行,确认是否是查询本身筛选条件过严导致无返回结果。
- 调整查询约束避免超限:在SELECT语句中增加返回行数限制,或是调小直径转FOV的系数,避免超出服务端单次查询上限:
# 修改查询开头,增加TOP限制 query1="""SELECT TOP 10000 bp_rp, parallax, pmra, pmdec, phot_g_mean_mag AS gp FROM gaiadr2.gaia_source WHERE 1 = CONTAINS(POINT('ICRS', ra, dec), """
内容的提问来源于stack exchange,提问作者Vikram Chandra
相关产品推荐
相关产品推荐

