You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:15:01